📄 ucom_rw.cpp
字号:
val1[i]=val1[i] + (initpop[i].chr[nomb] * (pow(2, (10 - k))));
val2[i]=val2[i] + pow(2,(10 - k));
}
//power3[i] = (((val1[i]/val2[i]) * 525) + 75);
//if(power3[i] >= 75 && power3[i] < 76)
// power3[i] = 0.0;
ada++;
initpop[i].pow3 = (((val1[i]/val2[i]) * 525) + 75);
if(initpop[i].pow3 == 75)
initpop[i].pow3 = 0.0;
}
}
if(j==4)
{
val1[i] = 0.0;
val2[i] = 0.0;
k = 0;
if(initpop[i].chr[j] == 0)
{
for(nomb=35;nomb<45;nomb++)
initpop[i].chr[nomb] = 0;
zero++;
//power4[i] = 0.0;
initpop[i].pow4 = 0.0;
}
else
{
for(nomb=35;nomb<45;nomb++)
{
initpop[i].chr[nomb] = random(2);
k++;
val1[i]=val1[i] + (initpop[i].chr[nomb] * (pow(2, (10 - k))));
val2[i]=val2[i] + pow(2,(10 - k));
}
//power4[i] = (((val1[i]/val2[i]) * 425) + 75);
//if(power4[i] >= 75 && power4[i] < 76)
// power4[i] = 0.0;
ada++;
initpop[i].pow4 = (((val1[i]/val2[i]) * 425) + 75);
if(initpop[i].pow4 == 100)
initpop[i].pow4 = 0.0;
}
}
}
if(zero == 4)//make sure there's at least 1 unit on
goto jom;
//if(ada == 4)
// goto jom;
initpop[i].sumpowgen = initpop[i].sumpowgen + initpop[i].pow1+ initpop[i].pow2+ initpop[i].pow3+ initpop[i].pow4;
if(x == 1)
{
if((initpop[i].sumpowgen > 1200) || (initpop[i].sumpowgen < 1100))
goto jom;
}
if(x == 2)
{
if((initpop[i].sumpowgen > 1500) || (initpop[i].sumpowgen < 1400))
goto jom;
}
if(x == 3)
{
if((initpop[i].sumpowgen > 1700) || (initpop[i].sumpowgen < 1600))
goto jom;
}
if(x == 4)
{
if((initpop[i].sumpowgen > 1900) || (initpop[i].sumpowgen < 1800))
goto jom;
}
if(x == 5)
{
if((initpop[i].sumpowgen > 1500) || (initpop[i].sumpowgen < 1400))
goto jom;
}
if(x == 6)
{
if((initpop[i].sumpowgen > 1200) || (initpop[i].sumpowgen < 1100))
goto jom;
}
}
}
void calc_power(int x)
{
if(x == 1)
{
for(i=1;i<=popsize;i++)
initpop[i].sumpowgen = 0.0;
for(i=1;i<=popsize;i++)
{
zero = 0;
initpop[i].sumpowgen = 0.0;
for(j=1;j<=4;j++)
{
if(j==1)
{
//power1[i] = 0.0;
initpop[i].pow1 = 0.0;
val1[i] = 0.0;
val2[i] = 0.0;
k = 0;
if(initpop[i].chr[j] == 0)
//power1[i] = 0.0;
initpop[i].pow1 = 0.0;
else
{
for(nomb=5;nomb<15;nomb++)
{
k++;
val1[i]=val1[i] + (initpop[i].chr[nomb] * (pow(2, (10 - k))));
val2[i]=val2[i] + pow(2,(10 - k));
}
//power1[i] = (((val1[i]/val2[i]) * 525) + 100);
//if(power1[i] >= 100 && power1[i] < 101)
// power1[i] = 0.0;
initpop[i].pow1 = (((val1[i]/val2[i]) * 525) + 100);
if(initpop[i].pow1 == 100)
initpop[i].pow1 = 0.0;
}
}
if(j==2)
{
//power2[i] = 0.0;
initpop[i].pow2 = 0.0;
val1[i] = 0.0;
val2[i] = 0.0;
k = 0;
if(initpop[i].chr[j] == 0)
initpop[i].pow2 = 0.0;
else
{
for(nomb=15;nomb<25;nomb++)
{
k++;
val1[i]=val1[i] + (initpop[i].chr[nomb] * (pow(2, (10 - k))));
val2[i]=val2[i] + pow(2,(10 - k));
}
//power2[i] = (((val1[i]/val2[i]) * 525) + 100);
//if(power2[i] >= 100 && power2[i] < 101)
// power2[i] = 0.0;
initpop[i].pow2 = (((val1[i]/val2[i]) * 525) + 100);
if(initpop[i].pow2 == 100)
initpop[i].pow2 = 0.0;
}
}
if(j==3)
{
//power3[i] = 0.0;
initpop[i].pow3 = 0.0;
val1[i] = 0.0;
val2[i] = 0.0;
k = 0;
if(initpop[i].chr[j] == 0)
initpop[i].pow3 = 0.0;
else
{
for(nomb=25;nomb<35;nomb++)
{
k++;
val1[i]=val1[i] + (initpop[i].chr[nomb] * (pow(2, (10 - k))));
val2[i]=val2[i] + pow(2,(10 - k));
}
//power3[i] = (((val1[i]/val2[i]) * 525) + 75);
//if(power3[i] >= 75 && power3[i] < 76)
// power3[i] = 0.0;
initpop[i].pow3 = (((val1[i]/val2[i]) * 525) + 75);
if(initpop[i].pow3 == 75)
initpop[i].pow3 = 0.0;
}
}
if(j==4)
{
//power4[i] = 0.0;
initpop[i].pow4 = 0.0;
val1[i] = 0.0;
val2[i] = 0.0;
k = 0;
if(initpop[i].chr[j] == 0)
initpop[i].pow4 = 0.0;
else
{
for(nomb=35;nomb<45;nomb++)
{
k++;
val1[i]=val1[i] + (initpop[i].chr[nomb] * (pow(2, (10 - k))));
val2[i]=val2[i] + pow(2,(10 - k));
}
//power4[i] = (((val1[i]/val2[i]) * 425) + 75);
//if(power4[i] >= 75 && power4[i] < 76)
// power4[i] = 0.0;
initpop[i].pow4 = (((val1[i]/val2[i]) * 425) + 75);
if(initpop[i].pow4 == 75)
initpop[i].pow4 = 0.0;
}
}
}
initpop[i].sumpowgen = initpop[i].sumpowgen + initpop[i].pow1 + initpop[i].pow2 + initpop[i].pow3 + initpop[i].pow4;
}
}
if(x == 2)
{
for(i=1;i<=popsize;i++)
tempop[i].sumpowgen = 0.0;
for(i=1;i<=popsize;i++)
{
zero = 0;
tempop[i].sumpowgen = 0.0;
for(j=1;j<=4;j++)
{
if(j==1)
{
//power1[i] = 0.0;
tempop[i].pow1 = 0.0;
val1[i] = 0.0;
val2[i] = 0.0;
k = 0;
if(tempop[i].chr[j] == 0)
tempop[i].pow1 = 0.0;
else
{
for(nomb=5;nomb<15;nomb++)
{
k++;
val1[i]=val1[i] + (tempop[i].chr[nomb] * (pow(2, (10 - k))));
val2[i]=val2[i] + pow(2,(10 - k));
}
//power1[i] = (((val1[i]/val2[i]) * 525) + 100);
//if(power1[i] >= 100 && power1[i] < 101)
// power1[i] = 0.0;
tempop[i].pow1 = (((val1[i]/val2[i]) * 525) + 100);
if(tempop[i].pow1 == 100)
tempop[i].pow1 = 0.0;
}
}
if(j==2)
{
//power2[i] = 0.0;
tempop[i].pow2 = 0.0;
val1[i] = 0.0;
val2[i] = 0.0;
k = 0;
if(tempop[i].chr[j] == 0)
tempop[i].pow2 = 0.0;
else
{
for(nomb=15;nomb<25;nomb++)
{
k++;
val1[i]=val1[i] + (tempop[i].chr[nomb] * (pow(2, (10 - k))));
val2[i]=val2[i] + pow(2,(10 - k));
}
//power2[i] = (((val1[i]/val2[i]) * 525) + 100);
//if(power2[i] >= 100 && power2[i] < 101)
// power2[i] = 0.0;
tempop[i].pow2 = (((val1[i]/val2[i]) * 525) + 100);
if(tempop[i].pow2 == 100)
tempop[i].pow2 = 0.0;
}
}
if(j==3)
{
//power3[i] = 0.0;
tempop[i].pow3= 0.0;
val1[i] = 0.0;
val2[i] = 0.0;
k = 0;
if(tempop[i].chr[j] == 0)
power3[i] = 0.0;
else
{
for(nomb=25;nomb<35;nomb++)
{
k++;
val1[i]=val1[i] + (tempop[i].chr[nomb] * (pow(2, (10 - k))));
val2[i]=val2[i] + pow(2,(10 - k));
}
//power3[i] = (((val1[i]/val2[i]) * 525) + 75);
//if(power3[i] >= 75 && power3[i] < 76)
// power3[i] = 0.0;
tempop[i].pow3 = (((val1[i]/val2[i]) * 525) + 75);
if(tempop[i].pow3 == 75)
tempop[i].pow3 = 0.0;
}
}
if(j==4)
{
//power4[i] = 0.0;
tempop[i].pow4 = 0.0;
val1[i] = 0.0;
val2[i] = 0.0;
k = 0;
if(tempop[i].chr[j] == 0)
tempop[i].pow4 = 0.0;
else
{
for(nomb=35;nomb<45;nomb++)
{
k++;
val1[i]=val1[i] + (tempop[i].chr[nomb] * (pow(2, (10 - k))));
val2[i]=val2[i] + pow(2,(10 - k));
}
//power4[i] = (((val1[i]/val2[i]) * 425) + 75);
//if(power4[i] >= 75 && power4[i] < 76)
// power4[i] = 0.0;
tempop[i].pow4 = (((val1[i]/val2[i]) * 425) + 75);
if(tempop[i].pow4 == 75)
tempop[i].pow4 = 0.0;
}
}
}
tempop[i].sumpowgen = tempop[i].sumpowgen + tempop[i].pow1 + tempop[i].pow2 + tempop[i].pow3 + tempop[i].pow4;
}
}
}
void eval_fitness(int x,int demand)
{
if(x == 1)// true for initpop
{
for(i=1;i<=popsize;i++)
{
initpop[i].fitness = 0.0;
cost1=0.0;cost2=0.0;cost3=0.0;cost4=0.0;
//check for unit 1
if(initpop[i].chr[1] == 0)
cost1 = 0.0;
else
{
cost1 = (0.5 * 0.008 * initpop[i].pow1 * initpop[i].pow1) + (8 * initpop[i].pow1) + 500;
if(demand != 1)
{
if(solution[demand - 1].chr[1] == 0 && initpop[i].chr[1] == 1)//assign startup cost
cost1 = cost1 + 3000;
}//end if
}//end if
if(demand != 1)
{
if(solution[demand - 1].chr[1] == 1 && initpop[i].chr[1] == 0)//assign shutdown cost
{
cost1 = cost1 + 1500;
}
}
//check for unit 2
if(initpop[i].chr[2] == 0)
cost2 = 0.0;
else
{
cost2 = (0.5 * 0.0096 * initpop[i].pow2 * initpop[i].pow2) + (6.4 * initpop[i].pow2) + 400;
if(demand != 1)
{
if(solution[demand - 1].chr[2] == 0 && initpop[i].chr[2] == 1)//assign startup cost
cost2 = cost2 + 3000;
}//end if
}//end if
if(demand != 1)
{
if(solution[demand - 1].chr[2] == 1 && initpop[i].chr[2] == 0)//assign shutdown cost
{
cost2 = cost2 + 1500;
}
}
//check for unit 3
if(initpop[i].chr[3] == 0)
cost3 = 0.0;
else
{
cost3 = (0.5 * 0.01 * initpop[i].pow3 * initpop[i].pow3) + (7.9 * initpop[i].pow3) + 600;
if(demand != 1)
{
if(solution[demand - 1].chr[3] == 0 && initpop[i].chr[3] == 1)//assign startup cost
cost3 = cost3 + 3000;
}//end if
}//end if
if(demand != 1)
{
if(solution[demand - 1].chr[3] == 1 && initpop[i].chr[3] == 0)//assign shutdown cost
{
cost3 = cost3 + 1500;
}
}
//check for unit 4
if(initpop[i].chr[4] == 0)
cost4 = 0.0;
else
{
cost4 = (0.5 * 0.011 * initpop[i].pow4 * initpop[i].pow4) + (7.5 * initpop[i].pow4) + 400;
if(demand != 1)
{
if(solution[demand - 1].chr[4] == 0 && initpop[i].chr[4] == 1)//assign startup cost
cost4 = cost4 + 3000;
}//end if
}//end if
if(demand != 1)
{
if(solution[demand - 1].chr[4] == 1 && initpop[i].chr[4] == 0)//assign shutdown cost
{
cost4 = cost4 + 1500;
}
}
initpop[i].fitness = initpop[i].fitness + cost1 + cost2 + cost3 + cost4;
}//end for
}//end if
if(x == 2)// true for tempop
{
for(i=1;i<=popsize;i++)
{
tempop[i].fitness = 0.0;
cost1=0.0;cost2=0.0;cost3=0.0;cost4=0.0;
//check for unit 1
if(tempop[i].chr[1] == 0)
cost1 = 0.0;
else
{
cost1 = (0.5 * 0.008 * tempop[i].pow1 * tempop[i].pow1) + (8 * tempop[i].pow1) + 500;
if(demand != 1)
{
if(solution[demand - 1].chr[1] == 0 && tempop[i].chr[1] == 1)//assign startup cost
cost1 = cost1 + 3000;
}//end if
}//end if
if(demand != 1)
{
if(solution[demand - 1].chr[1] == 1 && tempop[i].chr[1] == 0)//assign shutdown cost
{
cost1 = cost1 + 1500;
}
}
//check for unit 2
if(tempop[i].chr[2] == 0)
cost2 = 0.0;
else
{
cost2 = (0.5 * 0.0096 * tempop[i].pow2 * tempop[i].pow2) + (6.4 * tempop[i].pow2) + 400;
if(demand != 1)
{
if(solution[demand - 1].chr[2] == 0 && tempop[i].chr[2] == 1)//assign startup cost
cost2 = cost2 + 3000;
}//end if
}//end if
if(demand != 1)
{
if(solution[demand - 1].chr[2] == 1 && tempop[i].chr[2] == 0)//assign shutdown cost
{
cost2 = cost2 + 1500;
}
}
//check for unit 3
if(tempop[i].chr[3] == 0)
cost3 = 0.0;
else
{
cost3 = (0.5 * 0.01 * tempop[i].pow3 * tempop[i].pow3) + (7.9 * tempop[i].pow3) + 600;
if(demand != 1)
{
if(solution[demand - 1].chr[3] == 0 && tempop[i].chr[3] == 1)//assign startup cost
cost3 = cost3 + 3000;
}//end if
}//end if
if(demand != 1)
{
if(solution[demand - 1].chr[3] == 1 && tempop[i].chr[3] == 0)//assign shutdown cost
{
cost3 = cost3 + 1500;
}
}
//check for unit 4
if(tempop[i].chr[4] == 0)
cost4 = 0.0;
else
{
cost4 = (0.5 * 0.011 * tempop[i].pow4 * tempop[i].pow4) + (7.5 * tempop[i].pow4) + 400;
if(demand != 1)
{
if(solution[demand - 1].chr[4] == 0 && tempop[i].chr[4] == 1)//assign startup cost
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -