遗传算法解混合流水车间调度问题(注释很多)JavaScript (5)

变异也比较简单,随便交换两个位的数就可以了,在自然界中变异不常发生,我们可以设置一个概率去控制其发生的可能性。

var VARITATION_RATE = 0.2; // 变异发生的概率 // 变异 为了保证最后得到的分数是我们测试中出现的最大值,每次选择出的最大值不会参与变异 varitation(poor, POOR_SIZE, WORKPIECE_NUM, VARITATION_RATE); /** 变异算法 * @param {*} poor 种群池 * @param {*} poor_size 种群池的大小(自然环境的容量)(流程顺序方案数目) * @param {*} workpiece_num 总共要完成的零件数目(也是每个个体的大小) * @param {*} varitarion_rate 变异率,变异率越大,发生变异的可能性越大 */ function varitation(poor, poor_size, workpiece_num, varitarion_rate) { for(var i=1; i<poor_size; i++){ // 从第二大的开始变异 if(Math.random()<varitarion_rate){ // 有一定概率进入变异环节 // 随机选出连个位置 var p1 = random(workpiece_num); var p2 = random(workpiece_num); // 交换两个位置里的值 var temp = poor[i][p1]; poor[i][p1] = poor[i][p2]; poor[i][p2] = temp; } } }
8、完整代码

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgyssg.html