littlebubububu 发表于 2013-3-31 10:25

帮忙修改一下我的程序吧,一直运行不出来啊,好吧,我承认我是小白··

我的问题在附件中,帮忙看看吧。还有我写了一点关于附件中模型的程序,可怎么也运行不出来,请大侠指教···
model:
    sets:
         order/1..10/:x,q,c,d,w,p;
    endsets
      max=@sum(order(i):x*(q-w*@if((c-d)#ge#0,c-d,0)));
      @for(order(i):c(i)=@sum(order(j)|j#le#i:x(j)*p(j)));
      @for(order:@bin(x));
   data:
         q=1,8,75,88,87,52,35,91,41,51;
         c=27,41,9,1,34,96,8,37,16,36;
         d=68,49,33,62,12,71,26,90,62,64;
         w=48,96,38,22,65,38,54,83,80,28;
         p=34,30,61,78,75,83,73,36,89,7;
   enddata
end

madio 发表于 2013-3-31 17:18

我把等式约束改为不等式约束了,等式约束太强,几个式子没有交集,所以无法求解,改为不等式就可以了!model:
    sets:
         order/1..10/:x,q,c,d,w,p;
    endsets

   data:
         q=1,8,75,88,87,52,35,91,41,51;
         c=27,41,9,1,34,96,8,37,16,36;
         d=68,49,33,62,12,71,26,90,62,64;
         w=48,96,38,22,65,38,54,83,80,28;
         p=34,30,61,78,75,83,73,36,89,7;
   enddata
      max=@sum(order(i):x(i)*(q(i)-w(i)*@if((c(i)-d(i))#ge#0,c(i)-d(i),0)));
      
      @for(order(i):@sum(order(j)|j#le#i:x(j)*p(j))>=c(i));
      @for(order(i):@bin(x(i)));
end

littlebubububu 发表于 2013-3-31 19:00

madio 发表于 2013-3-31 17:18 static/image/common/back.gif
我把等式约束改为不等式约束了,等式约束太强,几个式子没有交集,所以无法求解,改为不等式就可以了!

太激动了,终于运行出来了,要哭了都······
还行问一下专家,改动之后表达的意思是一样的对吧?
那些数据怎么从excel中引用呢,如果我把excel中名字改为data1-10@ole('e:\yanzheng.xlsm')对吗?

madio 发表于 2013-4-1 11:01

虽然我把可行域扩大了,但是一旦找到了最优解就应该是差不多的,毕竟是在可行域的边界上达到最优解。
导入数据可以像下面这样做。

data:
q,c,d,w,p=@OLE('D:\yanzheng.XLS');
enddata

littlebubububu 发表于 2013-4-1 20:51

madio 发表于 2013-4-1 11:01 static/image/common/back.gif
虽然我把可行域扩大了,但是一旦找到了最优解就应该是差不多的,毕竟是在可行域的边界上达到最优解。
导入 ...

我弄好了,还是得多学习例子啊!
页: [1]
查看完整版本: 帮忙修改一下我的程序吧,一直运行不出来啊,好吧,我承认我是小白··