
线性规划求解清晰两部分
- 目标函数(max,min)
- 约束条件(s.t.)
- 求解前应转化为标准形式:
s.t.
Matlab求解代码
[x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,X0,OPTIONS)
1.1 scipy库求解
from scipy import optimize import numpy as np #直接用np代替numpy #求解函数 res=optimize.linprog(c,A,b,Aeq,beq,LB,UB,XO,OPTIONS) #目标函数最小值 print(res.fun) #最优解 print(res.x)
res对象
res.fun表示最小值
res.x表示最优解
例一
第一行表示最大值,但是标准的是最小值,所以输出的c取负值
注意上方的第三行,不等号方向相反则
c=np.array([2,3,-5]) A=np.array([[-2,5,-1],[1,3,1]]) b=np.array([-10,12]) Aeq=np.array([[1,1,1]]) beq=np.array([7]) #注意数组的表示[为列][[为行]] res=optimize.linprog(-c,A,b,Aeq,beq) print(res)
1.2 pulp库求解
对于pulp库
value() – Finds the value of a variable or expression
lpSum() – given a list of the form [a1*x1, a2x2, …, anxn] will construct a linear expression to be used as a constraint or variable
lpDot() --given two lists of the form [a1, a2, …, an] and [ x1, x2, …, xn] will construct a linear expression to be used as a constraint or variable
# pulp库求解 import panda import numpy import pulp # 目标函数的系数 z = [2,3,1] #约束 a = [[1,4,2],[3,2,0]] b = [8, 6] #x=pulp.LpVariable("x",0,3) #prob=pulp.LpProblem("ss",pulp.LpMinmize) #确定最大化最小化问题,最大化只要把Min改成Max即可 m = pulp.LpProblem(sense=pulp.LpMinimize) #定义三个变量放到列表中 for i in range(1,4): x = [pulp.LpVariable(f'x{i}', lowBound=0)] #定义目标函数,lpDot可以将两个列表的对应位相乘再加和 #相当于z[0]*x[0]+z[1]*x[1]+z[2]*x[2] m += pulp.lpDot(z, x) #设置约束条件 for i in range(len(a)): m += (pulp.lpDot(a[i], x) >= b[i]) #求解 m.solve() #输出结果 print(f'优化结果:{pulp.value(m.objective)}') print(f'参数取值:{[pulp.value(var) for var in x]}')
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)