Fork me on GitHub

线性规划(1)

第一次接触数学建模,看到了一个小题

内容与线性规划相关:

队友给出的观点如下

我看的一脸疑惑,之前对这个完全没有了解
根据他的模型提交了一个结果,如下

点击查看代码
from scipy import optimize
import numpy as np
import pulp
MyprobLP = pulp.LpProblem("LPProbDemo1",sense=pulp.LpMaximize)
a1 = pulp.LpVariable('a1',lowBound=0,cat='Continuous')
a2 = pulp.LpVariable('a2',lowBound=0,cat='Continuous')
a3 = pulp.LpVariable('a3',lowBound=0,cat='Continuous')
a4 = pulp.LpVariable('a4',lowBound=0,cat='Continuous')
a5 = pulp.LpVariable('a5',lowBound=0,cat='Continuous')
b1 = pulp.LpVariable('b1',lowBound=0,cat='Continuous')
b2 = pulp.LpVariable('b2',lowBound=0,cat='Continuous')
b3 = pulp.LpVariable('b3',lowBound=0,cat='Continuous')
b4 = pulp.LpVariable('b4',lowBound=0,cat='Continuous')
b5 = pulp.LpVariable('b5',lowBound=0,cat='Continuous')
MyprobLP **+=**3/4*a1+7753/10000*a2+13/40*a3+5361/10000*a4+4787/2500*a5-3/8*b1-783/1750*b2-7/10*b3-1/2*b4-8613/7000*b5#目标函数
'''
约束条件
'''
MyprobLP **+=**(5*a1+10*a3**<=**6000)#不等式约束
MyprobLP **+=**(7*a2+9*a4+12*a5<=10000)
MyprobLP **+=**(6*b1+8*b4<=4000)
MyprobLP **+=**(4*b2+11*b5<=7000)
MyprobLP **+=**(7*b3<=4000)
MyprobLP**+=**(a1+a2**==**b1+b2+b3)#等式约束
MyprobLP**+=**(a3+a4==b4)
MyprobLP.solve()
print("Status:",pulp.LpStatus[MyprobLP.status])
for v in MyprobLP.variables():
    print(v.name,"=",v.varValue)
print("F(x)=",pulp.value(MyprobLP.objective))

但是答案不对
只能上网上搜搜大佬的解析(


这是找到的解答。。
但是作为编程人员要求出答案
主要学习c++,辅修python所以上网查询大佬方法(搜索引擎)

这里有几个看不懂的地方:(pulp库中的LpProblem LpVariable)

* MyprobLP = pulp.LpProblem("LPProbDemo1",sense=pulp.LpMaximize)

* a1 = pulp.LpVariable('a1',lowBound=0,cat='Continuous')//感觉像是一个范围

* MyprobLP.solve()//得出结果?

* pulp.LpStatus[MyprobLP.status]

* for v in MyprobLP.variables():

print(v.name,"=",v.varValue)

print("F(x)=",pulp.value(MyprobLP.objective))

查明语句具体内容

1. MyprobLP = pulp.LpProblem("LPProbDemo1",sense=pulp.LpMaximize)

模型的建立 ,用来构造一个LP问题实例 pulp.LpProblem(name,sense)--name_实例的名字;sense_LpMinimize或LpMaximize中的一个,用来指定目标函数是求极大值还是极小值。

2. a1 = pulp.LpVariable('a1',lowBound=0,cat='Continuous')

构造函数,用来构造LP问题中的变量 pulp.LpVariable(name, lowBound=None, upBound=None, cat='Continuous', e=None)//lowBound下界;upBound上界;cat指定变量(Integer(整数问题),Binary(0/1问题))(离散)||Continuous(连续)

3. MyprobLP.solve()//求解 solve() 求解函数

4. print("Status:",pulp.LpStatus[MyprobLP.status])//输出求解状态

5. for v in MyprobLP.variables():

print(v.name,"=",v.varValue) 输出每一个变量的最优解

6. print("F(x)=",pulp.value(MyprobLP.objective)) 输出最优解的目标函数值

总结:

什么是线性规划

线性规划(Linear programming),在线性等式或不等式约束条件下求解线性目标函数的极值问题,常用于解决资源分配、生产调度和混合问题。

线性规划求解

(1)问题定义,确定决策变量、目标函数和约束条件;
(2)模型构建,由问题描述建立数学方程,并转化为标准形式的数学模型;
(3)模型求解,用标准模型的优化算法对模型求解,得到优化结果;

本次用到通过pulp库实现简单线性规划问题求值

参考https://blog.csdn.net/youcans/article/details/116371416

posted @ 2022-11-01 16:07  .u.i.c  阅读(130)  评论(0编辑  收藏  举报