声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2750|回复: 0

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

[复制链接]
发表于 2007-6-22 06:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

水量01234567
用户








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


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


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

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


得相同结果。

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

来自:simwe-shamohu
回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-15 16:45 , Processed in 0.069884 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表