数学建模专题1.1线性规划模型(LP问题) 您所在的位置:网站首页 线性规划模型步骤 数学建模专题1.1线性规划模型(LP问题)

数学建模专题1.1线性规划模型(LP问题)

2024-02-13 11:35| 来源: 网络整理| 查看: 265

一:前言

数学规划是运筹学的一个重要分支,而线性规划又是数学规划中的一部分主要内容,很多实际问题都可以归结为"线性规划(Linear Programming,LP)"问题。

二:解决步骤

规划模型由3个要素组成:

决策变量:问题中要确定的未知量,用于表明规划问题中的方案,措施等目标函数:是决策变量的函数,优化目标通常是求该函数的最大值或最小值约束条件:是决策变量的约束和限制条件,通常由等式和不等式组成

解决步骤:

第一步:分析问题,找出决策变量第二步:找出约束条件,即决策变量必须满足的一组线性等式或不等式约束第三步:根据问题的目标,构造一个关于决策变量的线性函数,即目标函数 三:线性规划模型的一般形式

max(或min)Z=C^{t}X

s.t.\left \{ \right. AX \leq (or\geq ,= )b

       \left \{ \right.x\geq 0

四:例题求解及其代码

主要利用cvxpy库求解,命令行输入以下代码即可下载cvxpy库(若想下载其他库,修改cvxpy即可)

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple cvxpy 例一

某企业利用两种原材料A和B生产三种产品P₁、P₂和P₃。已知每生产 1 公斤的产品所消耗的原材料A、B的数量 (单位:公斤) 和花费的加工时间C (单位:小时),每公斤产品销售后所带来的利润 (单位:元) 以及每天可用的资源的数量如表 4.1 所示,则该企业应该如何制订每天的生产计划,才能使所获利润达到最大?

模型建立

 代码实现 import cvxpy as cp from numpy import array A = array([[2,4,3],[3,1,5],[7,3,5]]) #约束矩阵 b = array([150,160,200]) #约束条件的右边向量 c = array([70,50,60]) #目标向量 x = cp.Variable(3,pos=True) #定义决策变量范围为非负数 obj = cp.Maximize(c@x) #构造目标函数 cons = [A@x=20, x[0,3]+x[1,2]+x[2,1]+x[3,0]>=12] '''上述代码可以简写为 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[1,: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]+x[3,0]>=12 ] ''' prob =cp.Problem(obj,cons) prob.solve(solver='GLPK_MI')#对应的求解器也可以是CPLEX print("最优解:\n",x.value) print("最优值:",prob.value) 例四

代码实现

可以通过txt或者xlsx读入

import cvxpy as cp import numpy as np import pandas as pd c = np.genfromtxt("data0.txt",dtype=float,max_rows=6,usecols=range(8))#读取前6行前8列数据 e = np.genfromtxt("data0.txt",dtype=float,max_rows=6,usecols=8)#产量,读取最后一列数据 d = np.genfromtxt("data0.txt",dtype=float,skip_header=6)#销量,读取最后一行数据 # 上述代码也可写为 # data0 =pd.read_excel("data1.xlsx",header=None)#读取没有表头的表格 # data = data0.values # c = data[:-1,:-1] # e = data[:-1,-1] # d = data[-1,:-1] x = cp.Variable((6,8),pos=True)#6行8列数据,非负数 obj =cp.Minimize(cp.sum(cp.multiply(c,x)))#目标的最小值函数 #此处只能用cp.multipy(),不能用* con = [ cp.sum(x,axis=0)==d,#对应列的和 cp.sum(x,axis=1)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有