suffer 发表于 2007-6-22 06:31

动态规划的1stOpt与Lingo解法[转贴]

问题描述:可分配水资源量为7个单位,供给3个用户,各用户得到不同水量的经济效益如下表,求效益最高的水资源量分配方案。

水量01234567用户








用户1
051540809095100用户2
05154060707375用户3
04264045505153

1stOpt:p0,p1,p2代表分给3用户的水量,整数型,目标函数效益最大,约束p0+p1+p2=7
代码:
Constant Benefit(0:2, 0:7)=[0,5,15,40,80,90,95,100,
                                       0,5,15,40,60,70,73,75,
                                       0,4,26,40,45,50,51,53];
Parameter p(0:2)=;
Maximum;
StartProgram ;
Procedure MainModel;
Begin
    FunctionResult := Benefit] + Benefit] +Benefit];
    ConstrainedResult := p+p+p = 7;
End;
EndProgram;

结果:最大效益=120,p1=4, p2=3, p3=0或p1=4, p2=0, p3=3

Lingo:
代码:
Sets:
   User/1..3/;
   Water_Amount/1..8/;
   Arcs(User,Water_Amount):Benefit,Selection,Status;
EndSets
Data:
Benefit=0 5 15 40 80 90 95 100
      0 5 15 40 60 70 73 75
      0 4 26 40 45 50 51 53;
Status=0 1 2 3 4 5 6 7
       0 1 2 3 4 5 6 7
       0 1 2 3 4 5 6 7;
EndData
Max = @Sum(Arcs(i,j):Benefit(i,j)*Selection(i,j));
@For(Arcs: @Bin(Selection));
@For(User(i): @Sum(Arcs(i,k):Selection(i,k))=1);
@Sum(Arcs(i,j):Status(i,j)*Selection(i,j))=7;

得相同结果。

感受:复杂点的问题,Lingo描述语言有点生涩。

来自:simwe-shamohu
页: [1]
查看完整版本: 动态规划的1stOpt与Lingo解法[转贴]