Lingo-稠密集合和稀疏集合-(0/1规划)

Lingo-稠密集合和稀疏集合

1.1简介:

我们把派生集合 MATCH 的元素定义为 DEMAND 和 SUPPLY 的笛卡儿积,这种派生集 合称为稠密集合(简称稠集)。其实在 LINGO 中,派生集合的元素可以只是这个笛卡儿积的 一个真子集合,这种派生集合称为稀疏集合(简称疏集)。

1.2例题:

最短路问题 在复杂的公路网中,货车司机希望找到一条从一个城市到另一个城市的最短 路. 假设图 4-17 表示的是该公路网, 节点表示货车可以停靠的城市,弧上的权表示两个城市之 间的距离(百公里)。货车从城市 S 出发到达城市 T,如何选择行驶路线,使所经过的路程最短?
这里写图片描述

1.3分析:

假设从S到T的最优行驶路线 P 经过城市C1, 则P中从S到C1的子路也一定是从S到 C1的最优行驶路线;
假设 P 经过城市C2, 则P中从S到C2的子路也一定是从S到C2的最优 行驶路线.
因此, 为了得到从 S 到 T 的最优行驶路线, 我们只需要先求出从 S 到 Ck(k=1,2)的最 优行驶路线, 就可以方便地得到从 S 到 T 的最优行驶路线.
为了求出从 S 到 Bj(j=1,2)的最 优行驶路线, 只需要先求出从S到Ai(i=1,2,3)的最优行驶路线.
而S到Ai(i=1,2,3)的最优行驶路 线是很容易得到的(实际上, 此例中 S 到 Ai(i=1,2,3)只有唯一的道路).
d(Y,X)为城市 Y 与城市 X 之间的直接距离(若这 两个城市之间没有道路直接相连,则可以认为直接距离为无穷大),用L(X)表示城市 S 到城市 X 的最优行驶路线的路长
则:

L(S)=0; L(X)=min{L(Y)+d(Y,X)}, Y≠X

1.3.1对本例的具体问题,可以直接计算如下:

X ≠S
L(A1)=6, L(A2)=3, L(A3)=3;
L(B1)=min{ L(A1)+6, L(A2)+8, L(A3)+7}= 10 = L(A3)+7,
L(B2)=min{ L(A1)+5, L(A2)+6, L(A3)+4}= 7 = L(A3)+4;
L(C1)=min{ L(B1)+6, L(B2)+8
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Lingo是一个优化软件,它可以用来解决0-1规划问题。以下是使用Lingo解决0-1规划问题的基本步骤: 1. 定义变量:定义0-1变量,即变量只能取0或1的值。 2. 建立目标函数:建立一个目标函数,该函数需要最小化或最大化某个值。 3. 建立约束条件:建立约束条件,这些条件必须满足,否则解决方案将不是可行的。 4. 运行Lingo:输入变量、目标函数和约束条件,并运行Lingo求解问题。 5. 分析结果:分析Lingo的输出结果,包括变量的取值和目标函数的值,验证解决方案的正确性。 下面是一个简单的0-1规划问题的例子: 假设有三个任务需要完成,每个任务需要花费不同的时间,每个任务必须由一个人完成。如果有两个人可以完成任务,如何分配任务,使得完成所有任务的总时间最短? 变量定义: - x1,x2,x3是0-1变量,表示任务1,2,3是否由第一个人完成; - y1,y2,y3是0-1变量,表示任务1,2,3是否由第二个人完成。 目标函数: - 最小化z = 2x1 + 4x2 + 3x3 + 3y1 + 2y2 + 5y3,表示完成所有任务的总时间。 约束条件: - x1 + x2 + x3 = 1,表示任务必须由一个人完成; - y1 + y2 + y3 = 1,表示任务必须由一个人完成; - x1 + y1 ≤ 1,表示任务1不能被两个人同时完成; - x2 + y2 ≤ 1,表示任务2不能被两个人同时完成; - x3 + y3 ≤ 1,表示任务3不能被两个人同时完成。 Lingo代码如下: ``` MIN = 2 x1 + 4 x2 + 3 x3 + 3 y1 + 2 y2 + 5 y3 BINARIES x1 x2 x3 y1 y2 y3 END SUBJECT TO Task1: x1 + x2 + x3 = 1 Task2: y1 + y2 + y3 = 1 Task3: x1 + y1 <= 1 Task4: x2 + y2 <= 1 Task5: x3 + y3 <= 1 END ``` Lingo的输出结果为: ``` Objective Value: 5 x1 = 0 x2 = 0 x3 = 1 y1 = 1 y2 = 1 y3 = 0 ``` 这意味着,任务1和2由第二个人完成,任务3由第一个人完成,总时间为5。这是一个可行的解决方案,因为它满足所有的约束条件,并且是最优的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值