魏关亭侯 发表于 2012-7-25 10:30

求助,代码第二段啥意思

背包问题,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

赵煜星 发表于 2012-7-25 21:01

好啊 我喜欢

梦天涯M 发表于 2012-8-5 11:54

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

梦天涯M 发表于 2012-8-5 11:56

不好意思,上边写成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)));

梦天涯M 发表于 2012-8-5 11:58

  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

梦天涯M 发表于 2012-8-5 11:59

第一件物品取1件,第8件物品取11件,最大价值115
页: [1]
查看完整版本: 求助,代码第二段啥意思