求助,代码第二段啥意思
背包问题,12件物品质量为2,5,18,3,2,5,10,4,11,7,14,6,价值为5,10,13,4,3,11,13,10,8,16.7.4,包的最大重量是46求最优方案
代码如下,第二段看不懂,从那个=~开始,那符号啥意思
a=0.95
k=;
k=-k;
d=;
restriction=46;
num=12;
sol_new=ones(1,num);
E_current=inf;E_best=inf;
sol_current=sol_new; sol_best=sol_new;
t0=97;tf=3;t=t0;
p=1;
while t>=tf
for r=1:100
tmp=ceil(rand.*num);
sol_new(1,tmp)=~sol_new(1,tmp);
while 1
q=(sol_new*d<=restriction)
if ~q
p=~p
tmp=find(sol_new==1);
if p
sol_new(1,tmp)=0;
else
sol_new(1,tmp(end))=0;
end
else
break
end
end
好啊 我喜欢 model:
sets:
beibao/1..12/:zhiliang,jiazhi,x;
endsets
data:
zhiliang=2 5 18 3 2 5 10 4 11 7 14 6;
jiazhi=5 10 13 4 3 11 13 10 8 16 7 4;
enddata
max=@sum(beibao(i):jiazhi(i)*x(i));
@sum(beibao(i):zhiliang(i)*x(i))<46;
@for(beibao(i):
@bin(x(i)));
结果:
Global optimal solution found.
Objective value: 76.00000
Objective bound: 76.00000
Infeasibilities: 0.000000
Extended solver steps: 0
Total solver iterations: 0
Model Class: PILP
Total variables: 12
Nonlinear variables: 0
Integer variables: 12
Total constraints: 2
Nonlinear constraints: 0
Total nonzeros: 24
Nonlinear nonzeros: 0
Variable Value Reduced Cost
ZHILIANG( 1) 2.000000 0.000000
ZHILIANG( 2) 5.000000 0.000000
ZHILIANG( 3) 18.00000 0.000000
ZHILIANG( 4) 3.000000 0.000000
ZHILIANG( 5) 2.000000 0.000000
ZHILIANG( 6) 5.000000 0.000000
ZHILIANG( 7) 10.00000 0.000000
ZHILIANG( 8) 4.000000 0.000000
ZHILIANG( 9) 11.00000 0.000000
ZHILIANG( 10) 7.000000 0.000000
ZHILIANG( 11) 14.00000 0.000000
ZHILIANG( 12) 6.000000 0.000000
JIAZHI( 1) 5.000000 0.000000
JIAZHI( 2) 10.00000 0.000000
JIAZHI( 3) 13.00000 0.000000
JIAZHI( 4) 4.000000 0.000000
JIAZHI( 5) 3.000000 0.000000
JIAZHI( 6) 11.00000 0.000000
JIAZHI( 7) 13.00000 0.000000
JIAZHI( 8) 10.00000 0.000000
JIAZHI( 9) 8.000000 0.000000
JIAZHI( 10) 16.00000 0.000000
JIAZHI( 11) 7.000000 0.000000
JIAZHI( 12) 4.000000 0.000000
X( 1) 1.000000 -5.000000
X( 2) 1.000000 -10.00000
X( 3) 0.000000 -13.00000
X( 4) 1.000000 -4.000000
X( 5) 1.000000 -3.000000
X( 6) 1.000000 -11.00000
X( 7) 1.000000 -13.00000
X( 8) 1.000000 -10.00000
X( 9) 0.000000 -8.000000
X( 10) 1.000000 -16.00000
X( 11) 0.000000 -7.000000
X( 12) 1.000000 -4.000000
Row Slack or Surplus Dual Price
1 76.00000 1.000000
2 2.000000 0.000000
不好意思,上边写成bin了,应该是gin
正确程序:
model:
sets:
beibao/1..12/:zhiliang,jiazhi,x;
endsets
data:
zhiliang=2 5 18 3 2 5 10 4 11 7 14 6;
jiazhi=5 10 13 4 3 11 13 10 8 16 7 4;
enddata
max=@sum(beibao(i):jiazhi(i)*x(i));
@sum(beibao(i):zhiliang(i)*x(i))<46;
@for(beibao(i):
@gin(x(i))); Global optimal solution found.
Objective value: 115.0000
Objective bound: 115.0000
Infeasibilities: 0.000000
Extended solver steps: 0
Total solver iterations: 0
Model Class: PILP
Total variables: 12
Nonlinear variables: 0
Integer variables: 12
Total constraints: 2
Nonlinear constraints: 0
Total nonzeros: 24
Nonlinear nonzeros: 0
Variable Value Reduced Cost
ZHILIANG( 1) 2.000000 0.000000
ZHILIANG( 2) 5.000000 0.000000
ZHILIANG( 3) 18.00000 0.000000
ZHILIANG( 4) 3.000000 0.000000
ZHILIANG( 5) 2.000000 0.000000
ZHILIANG( 6) 5.000000 0.000000
ZHILIANG( 7) 10.00000 0.000000
ZHILIANG( 8) 4.000000 0.000000
ZHILIANG( 9) 11.00000 0.000000
ZHILIANG( 10) 7.000000 0.000000
ZHILIANG( 11) 14.00000 0.000000
ZHILIANG( 12) 6.000000 0.000000
JIAZHI( 1) 5.000000 0.000000
JIAZHI( 2) 10.00000 0.000000
JIAZHI( 3) 13.00000 0.000000
JIAZHI( 4) 4.000000 0.000000
JIAZHI( 5) 3.000000 0.000000
JIAZHI( 6) 11.00000 0.000000
JIAZHI( 7) 13.00000 0.000000
JIAZHI( 8) 10.00000 0.000000
JIAZHI( 9) 8.000000 0.000000
JIAZHI( 10) 16.00000 0.000000
JIAZHI( 11) 7.000000 0.000000
JIAZHI( 12) 4.000000 0.000000
X( 1) 1.000000 -5.000000
X( 2) 0.000000 -10.00000
X( 3) 0.000000 -13.00000
X( 4) 0.000000 -4.000000
X( 5) 0.000000 -3.000000
X( 6) 0.000000 -11.00000
X( 7) 0.000000 -13.00000
X( 8) 11.00000 -10.00000
X( 9) 0.000000 -8.000000
X( 10) 0.000000 -16.00000
X( 11) 0.000000 -7.000000
X( 12) 0.000000 -4.000000
Row Slack or Surplus Dual Price
1 115.0000 1.000000
2 0.000000 0.000000
第一件物品取1件,第8件物品取11件,最大价值115
页:
[1]