【学习笔记】pulp求解线性规划

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

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

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

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

下面弄个简单题试试

设变量满足约束条件,则的最大值是多少?

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'优化结果:{lp.value(PB.objective)}')
print(f'参数取值:{[lp.value(var) for var in x]}')

# 输出结果:
# 优化结果:18.0
# 参数取值:[3.0, 4.0]

后面照着 【数学建模】线性规划各种问题的Python调包方法 里面的题目敲了一遍代码,这段先告一段落吧 O O.

对着敲的代码和一些理解:pulp求解线性规划

你可能感兴趣的:(【学习笔记】pulp求解线性规划)