线性规划

上完建模课给自己开了个新坑,看了一下午线性规划的求解,说来惭愧,至今没有主动接触运筹学方面的知识。

工具方面选择的是pulp,python做线性规划的第三方工具包(要用pip安装)。没有使用老师推荐的lingo主要是因为打算保持工具的一致性(就是懒得学)。

学习了两篇文章:【数学建模】线性规划各种问题的Python调包方法使用Python/PuLp解决线性规划问题

线性规划问题简单来说就是:目标函数 + 约束条件,其中自然也就包括决策变量

下面弄个简单题试试

设变量x,y满足约束条件z = \begin{cases} 2x - y \leq 2 \\ x - y \geq -1 \\ x + y \geq 1 \end{cases},则z = 2x + 3y的最大值是多少?

import pulp as lp
# 目标函数和约束条件的系数
z = [2,3]
a = [[1,-1],[1,1],[2,-1]]
b = [-1,1,2]
# 第一步声明实例化LpProblem,'name'为命名,sense=pulp.LpMaximize/pulp.LpMinimize为确定问题类型
PB = lp.LpProblem('maxZ',sense=lp.LpMaximize)
# 第二步声明变量分别是x1,x2,x3......xn
x = [lp.LpVariable(f'x{i}',lowBound=0) for i in range(1,3)]
# 第三步将目标函数和约束条件分别传入PB,这里用到了lpDot方法,相当于用系数向量(行)乘以变量向量(列)
PB += lp.lpDot(z,x)
PB += (lp.lpDot(a[0],x) >= b[0])
PB += (lp.lpDot(a[1],x) >= b[1])
PB += (lp.lpDot(a[2],x) <= b[2])
# 求解
PB.solve()
# 输出结果
print(f'优化结果:{pulp.value(PB.objective)}')
print(f'参数取值:{[pulp.value(var) for var in x]}')
# 输出结果:
# 优化结果:18.0
# 参数取值:[3.0, 4.0]

你或许想:《去原作者写文章的地方

秘宝猎人下载
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论