栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

数学建模

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数学建模

Day 1 线性规划

线性规划求解清晰两部分

  • 目标函数(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]}')

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/488714.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号