线性规划
要求:
-
写出线性规划函数
-
利用工具求解
本质上是极值问题
三要素:
- 决策变量 问题的求解就是找出决策变量的最优值
- 约束条件 范围意义
- 目标函数 关于决策变量的某个函数
最优解也可能不存在,这对应于两种可能
- 该线性规划本身不可行(可行区域为空)
- 约束条件过松,导致可行区域无界
单纯形法求解线性规划
算法从一个顶点开始,不断地重复地寻找目标函数值较高的邻居顶点,并向前移动,一旦再也找不到更高地邻居,结束计算
只适用于简单的线性规划问题,可能有限于局部最优解
线性规划问题的标准型是:
- 目标函数的最大约束
max(把min转换成max——两边添加负号)
- 等式约束
保持等号
- 非负约束
右端常量b为非负数 / 决策变量非负
求目标的最小值 F=-f
约束条件为不等式,引入一个非负变量Xn+i ,转化为线性等式,其中Xn+i为松弛变量
如有bi <= 0 可在两边同乘 -1
如果有某个变量Xj无非负约束 可引进非负变量xj’ ,xj’’ ,令Xj = Xj’ - Xj’’ 代入到约束条件和目标函数中
用matlab求解线性规划问题
a.m 为matlab文件 不能命名为1.m
函数为:linprog
x = linprog(c,A,b,Aeq,beq,vLB,vUB)
c 为目标函数的系数向量
A为约束条件构成的向量系数矩阵,每一行用;隔开
b为 系数构成的列向量 用;隔开
Aeq =[] ; beq =[]
vlb= vub=
试用模型为:
min = Z = cTX
s.t. AX <= b
VLB <= X <= VUB
注意分母上不要出现决策变量
方法:进行变形
用python求解线性规划问题
scipy.optimize.linprog(c,A_ub=None,b_ub=None,A_eq=None,b_eq=None,bounds=None,method=‘simplex’, callback=None,options=None)
#导包
from scipy import optimize
import numpy as np
#确定c,A,b,Aeq,beq
c = np.array([])
A = np.array([[],[],[],[]]) #两层[[]]
b = np.array([[]])
Aeq = np.array([])
beq =
x1=(0,None)
x2=(0,None)
#求解 bounds 为界限
x = optimize.linprog(c,A,b,Aeq,beq,bounds = (x1,x2,x3,x4,x5,x6))
print(x)