首页 > 编程语言 >数学建模 (线性规划 python代码 两种)

数学建模 (线性规划 python代码 两种)

时间:2024-03-24 16:59:52浏览次数:33  
标签:python sum 建模 线性规划 np import array cp

线性规划: 

线性规划(Linear Programming,LP)是一种数学优化方法,用于解决一类特定类型的最优化问题。该问题的目标是在给定的一组线性约束条件下,找到使某个线性目标函数达到最大或最小的变量值。线性规划问题可以表示为以下标准形式:

最小化(或最大化):Z = c^T * x

约束条件:Ax <= b, x >= 0

其中,c是一个n维向量,表示线性目标函数的系数;x是一个n维向量,表示待求解的变量;A是一个m×n的矩阵,表示约束条件的系数;b是一个m维向量,表示约束条件的右侧常数。

线性规划问题的解可以通过以下步骤求得:

  1. 将问题转化为标准形式。
  2. 判断是否存在可行解,即是否存在满足所有约束条件的变量值。
  3. 利用线性规划算法求解最优解。常用的线性规划算法包括单纯形法、内点法等。
  4. 检验最优解的可行性和稳定性。
  5. 根据实际问题对最优解进行解释和应用。

线性规划广泛应用于经济学、工程学、运筹学等领域,用于解决资源分配、生产计划、货运调度等问题。

运用scipy.optimize:

求最大值:

import numpy as np
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])#等式右侧系数矩阵

x1 = [0, None]  #未知数取值范围
x2 = [0, None]  #未知数取值范围
x3 = [0, None]  #未知数取值范围

res = optimize.linprog(-c,A,B,Aeq,Beq,bounds=(x1, x2, x3))#求最大值,将目标函数系数转为负数,求最小值(即为最大值)
print(res)

#最大值即为14

 求最小值:

#coding=gbk
from scipy import optimize
import numpy as np
c = np.array([2,3,1])#目标函数系数

A = np.array([[-1,-4,-2],[-3,-2,0]])#不等式<=左侧未知数系数矩阵
B = np.array([-8,-6])#不等式<=右侧未知数系数矩阵

x1 = [0, None]  #未知数取值范围
x2 = [0, None]  #未知数取值范围
x3 = [0, None]  #未知数取值范围
res = optimize.linprog(c,A,B,bounds=(x1, x2, x3))
print(res)

#最小值为7

运用cvxpy库:

求最大值:

import cvxpy as cp
from numpy import array

c = array([70, 50, 60])  #定义目标向量
a = array([[2, 4, 3], [3, 1, 5], [7, 3, 5]])  #定义约束矩阵
b = array([150, 160, 200])  #定义约束条件的右边向量
x = cp.Variable(3, pos=True)  #定义3个决策变量
obj = cp.Maximize(c@x)    #构造目标函数
cons = [a@x <=b]     #构造约束条件
prob = cp.Problem(obj, cons)
prob.solve(solver='GLPK_MI')   #求解问题
print('最优解为:', x.value)
print('最优值为:', prob.value)

 

求最小值:

import cvxpy as cp

x=cp.Variable((4,4),pos=True)
obj=cp.Minimize(2800*sum(x[:,0])+4500*sum(x[:3,1])+
    6000*sum(x[:2,2])+7300*x[0,3])
cons=[sum(x[0,:])>=15,
      sum(x[0,1:])+sum(x[2,:3])>=10,
      sum(x[0,2:])+sum(x[1,1:3])+sum(x[2,:2])>=20,
      x[0,3]+x[1,2]+x[2,1]+[3,0]>=12]
prob=cp.Problem(obj,cons)
prob.solve(solver='GLPK_MI')
print("最优值为:",prob.value)
print("最优解为:\n",x.value)

标签:python,sum,建模,线性规划,np,import,array,cp
From: https://blog.csdn.net/qq_74156152/article/details/136990204

相关文章

  • Python编程异步爬虫——aiohttp的使用
    异步爬虫—aiohttp的使用基本介绍asyncio模块其内部实现了对TCP、UDP、SSL协议的异步操作,但是对于HTTP请求来说,就需要用aiohttp实现了。aiohttp是一个基于asyncio的异步HTTP网络模块,它既提供了服务端,又提供了客户端。requests发起的是同步网络请求,aiohttp则是异步。ai......
  • Ubuntu下安装Python虚拟环境
    安装和配置安装包管理神器pipsudoaptinstallpython-pip升级pipsudopipinstall--upgradepip安装virtualenv,virtualenvwrappersudopipinstallvirtualenvsudopipinstallvirtualenvwrapper配置virtualenvwrapper#默认的virtualenvwrapper安装在/u......
  • 最长子字符串的长度(二)【华为OD机试JAVA&Python&C++&JS题解】
    一.题目-最长子字符串的长度(二)给你一个字符串s,字符串s首尾相连成一个环形,请你在环中找出’l’、‘o’、‘x’字符都恰好出现了偶数次最长子字符串的长度。输入描述:输入是一串小写的字母组成的字符串。输出描述:输出是一个整数补充说明:1<=s.length<=5x10^5......
  • 孙悟空吃蟠桃【华为OD机试JAVA&Python&C++&JS题解】
    一.题目-孙悟空吃蟠桃孙悟空爱吃蟠桃,有一天趁着蟠桃园守卫不在来偷吃。已知蟠桃园有N颗桃树,每颗树上都有桃子,守卫将在H小时后回来。孙悟空可以决定他吃蟠桃的速度K(个/小时),每个小时选一颗桃树,并从树上吃掉K个,如果树上的桃子少于K个,则全部吃掉,并且这一小时剩余的时间里不再......
  • 数学建模常用代码
    一维插值步骤步骤:(1)输入已知数据,x,y(2)输入待插自变量的值x1代码:x=1:12;y=[589152529313022252724];x1=1:0.1:12;t=interp1(x,y,x1,'spline');% plot(x1,t,'r:') %作图xlabel('x'),ylabel('y')二维插值步骤步骤:(1)先输入二维数据的x,y坐标值(2)输入Z......
  • 【锂电池SOC估计】【PyTorch】基于Basisformer时间序列锂离子电池SOC预测研究(python代
     ......
  • 【阻抗建模、验证扫频法】光伏并网逆变器扫频与稳定性分析(包含锁相环电流环)(Simulink
    ......
  • [Python]-基础-1.环境部署
    [Python]基础——环境部署&知识补充一、环境部署1.1软件下载1.1.1版本选择内置函数是Python自带的函数,不同版本的Python,其内置函数在数量和使用上大不相同,尤其是Python2和Python3大版本之间的迭代,教程全程采用Python3.8.3进行代码演示,为了避免版本兼容冲突,希望......
  • python每日可视化分析:从过去到现代数据分析的演进
    分析目标本文旨在探索数据分析发展历程中的关键时刻,包括重要人物的贡献和大事件的发生。通过对比不同年代的数据分析技术和方法,我们可以更好地理解数据分析如何成为今天决策制定不可或缺的一部分。分析步骤收集数据:搜集关于数据分析历史上重要人物和事件的信息。数据与可......
  • Arrow,一个超神奇的python库
    From: https://mp.weixin.qq.com/s/A3oa1tt2ef7p0MzLQQPp4A--------------------------------------------------------------------------------------https://github.com/arrow-py/arrow什么是Arrow?Arrow是一个Python的时间处理库,它提供了更加简单、清晰的方式来创建、操作......