本帖最后由 豆花0817 于 2020-12-13 21:35 编辑
比如下面这样,有6个变量a1到a6总和为N=65,希望找到使求得的总成本TC最小时候,这6个变量取值为多少?
这里我采取最笨的遍历方法,但是要很久很久的时间,有什么方法可以加快计算速度,或者取代for循环?
新人请教,不吝赐教!!
s=4;
N=65;
for a1=1:N
a2=1:N-a1
a3=1:N-a1-a2
a4=1:N-a1-a2-a3
a5=1:N-a1-a2-a3-a4
a6=N-a1-a2-a3-a4-a5;
if a6>=1 % 每个变量至少为1
d1=max(a1-s,0);
t1 = d1 / s * unit;
TTC1 = t1 * alpha / unit;
SEC1 = max((60 - 0 - t1) * beta / unit,0);
SLC1 = max((0 + t1 - 60) * gama / unit,0);
TC1= TTC1 + SEC1 + SLC1; %前面这些公式是计算TC的值
d2 = max(a2 + d1 - s,0);
t2 = d2 / s * unit;
TTC2 = t2 * alpha / unit;
SEC2 = max( (60 - 10 - t2) * beta / unit,0);
SLC2 = max((10 + t2 - 60) * gama / unit,0);
TC2= TTC2 + SEC2 + SLC2;
d3 =max( a3 + d2 - s,0);
t3 = d3 / s * unit;
TTC3 = t3 * alpha / unit;
SEC3 = max( (60 - 20 - t3) * beta / unit,0);
SLC3 = max((20 + t3 - 60) * gama / unit,0);
TC3=TTC3 + SEC3 + SLC3;
d4 =max( a4 + d3 - s,0);
t4 = d4 / s * unit;
TTC4 = t4 * alpha / unit;
SEC4 = max( (60 - 30 - t4) * beta / unit,0);
SLC4 = max((60 + t4 - 60) * gama / unit,0);
TC4=TTC4 + SEC4 + SLC4;
d5 =max( a5 + d4 - s,0);
t5 = d5 / s * unit;
TTC5 = t5 * alpha / unit;
SEC5 = max( (60 - 40 - t5) * beta / unit,0);
SLC5 = max((40 + t5 - 60) * gama / unit,0);
TC5=TTC5 + SEC5 + SLC5;
d6 =max( a6 + d5 - s,0);
t6 = d6 / s * unit;
TTC6 = t6 * alpha / unit;
SEC6 = max( (60 - 50 - t6) * beta / unit,0);
SLC6 = max((50 + t6 - 60) * gama / unit,0);
TC6=TTC6 + SEC6 + SLC6;
k=TC1+TC2+TC3+TC4+TC5+TC6;
TC=[TC,k];
mm=min(TC); %找到最小TC结果
A=[A,a1]; %存储每个结果
B=[B,a2];
C=[C,a3];
D=[D,a4];
E=[E,a5];
F=[F,a6];
G=[D,TC1];
H=[H,TC2];
I=[I,TC3];
J=[J,TC4];
K=[K,TC5];
L=[L,TC6];
end
end
end
end
end
end