一道01规划的送货问题

来源:百度知道 编辑:UC知道 时间:2024/06/23 23:01:16
Q N
min= ∑(∑50*(2+Ci-d)*Xij)
i=1 j=1
要把j这个订单放到i批量里面进行运输,运到客户手里,50为单位时间迟到的惩罚额,目标函数要使惩罚额最小。d-2-Ci:d是j这个订单货物约定到达的时间,2为路上花费的固定时间2小时。Ci为这批量开始运输的时间。所以惩罚时间为(d-2-Ci)。Xij是01规划。当j属于i批量时Xij=1,不属于时Xij=0。
还有个约束为Ci>d-2.
整个目标函数中Ci和Xij未知。
d=3 4 5.5 9 10.5 12.5 14 16 18 20.5 22.5 23
请教软件如何实现求出结果?编辑过程是怎么样的?(最好是lingo,其他也行)。谢谢

sets:
batch/b1..b12/:c;
goods/g1..g12/:d;
link(batch,goods):x;
endsets
data:
d=3 4 5.5 9 10.5 12.5 14 16 18 20.5 22.5 23;
enddata
min=@sum(goods(j):@sum(batch(i):50*(2+c(i)-d(j))*x(i,j)));
@for(batch(i):@for(goods(j):@bin(x(i,j))));
@for(goods(j):@sum(batch(i):x(i,j))=1);!确保每种货物只在一个批量里;
@for(goods(j):@for(batch(i):(2+c(i)-d(j))*x(i,j)>0));!ci>d-2;

兄弟,我做了一下午。。。。楞是没找出哪儿有错误。。。我发现现在笨的不行了。。。结果和我想的不太一样,可能不对啊,你看着给吧,不给也不怪你
还有就是你没有给我批量i的最大数我就按12个批量弄的。。。如果你想改的话
batch/b1..b12/:c; 这句中的那个12改成你想要的数就行了

找本lingo书看看就ok了 看看运筹学也行