1、Pandas读取数据文件(以文本文件作为示例),sep表示间隔,header=None表示无标题行
df = pd.read_table("data/youcans3.dat", sep="\t", header=None)
2、线性规划问题求解
1)问题定义,确定决策变量、目标函数和约束条件;
2)模型构建,由问题描述建立数学方程,并转化为标准形式的数学模型;
3)模型求解,用标准模型的优化算法对模型求解,得到优化结果。
很多Python的第三方包,都提供求解线性规划问题的算法,有的工具包还提供证书规划、非线性规划的算法,例如:
1)Scipy提供了了解简单线性或非线性规划问题,但是不能求解如背包问题的0-1规划问题,或整数规划问题,混合整数规划问题。
2)PuLP可以求解线性规划、整数规划、0-1规划、混合整数规划、二次规划和几何规划问题
2.1 PuLP库求解线性规划问题
- import pulp
- #1、定义一个规划问题,Demo表示问题名称,sense表示最大/最小参数(LpMinimize、LpMaximize)
- m = pulp.LpProblem("Demo", sense=pulp.LpMaximize)
- #定义决策变量(名称,上限,下限,参数)
- #2、cat来设置变量类型,'Continuous'表示连续变量(默认值),'Integer'表示离散变量,'Binary'表示0/1变量
- x1 = pulp.LpVariable('x1',lowBound=0,upBound=7,cat='Continuous')
- x2 = pulp.LpVariable('x2',lowBound=0,upBound=7,cat='Continuous')
- x3 = pulp.LpVariable('x3',lowBound=0,upBound=7,cat='Continuous')
- #3、添加目标函数
- m += 2*x1 + 3*x2 - 5*x3
- #4、添加约束条件
- m += (2*x1 - 5*x2 + x3 >= 10)
- m += (x1 + 3*x2 + x3 <= 12)
- m += (x1 + x2 + x3 == 7)
- #5、求解
- m.solve()
- print("Satus:",pulp.LpStatus[m.status]) #输出求解状态
- for v in m.variables():
- print(v.name,"=",v.varValue) #输出每个变量的最优值
- print("F(x) = ",pulp.value(m.objective)) #输出最优解的目标函数值