运筹学是一种科学的决策方法,通常在需要分配稀缺资源的条件下寻求系统的最佳设计和操作。决策的科学方法需要使用一个或多个数学/优化模型(即实际情况的表示)来做出最佳决策。

一个优化模型试图找到值决策变量即优化(最大化或最小化)的目标函数设定为满足给定的决策变量的所有值中的约束。它的三个主要组成部分是:

  • 目标函数:要优化的函数(最大化或最小化)
  • 决策变量:影响系统性能的可控变量
  • 约束:决策变量的一组约束(即线性不等式或等式)。非负约束将决策变量限制为取正值(例如,您不能生成负数的项目x 1、x 2 和x 3)。

建模步骤
对运筹学问题进行准确建模代表了最重要,有时也是最困难的任务。错误的模型会导致错误的解决方案,因此无法解决原始问题。应由具有不同专业领域的不同团队成员执行以下步骤,以获得对模型的准确和更深入的了解:

  1. 问题定义:定义项目的范围并确定结果是对三个要素的确定:决策变量的描述、目标的确定和限制(即约束)的确定。
  2. 模型构建:将问题定义转化为数学关系。
  3. 模型解决方案:使用标准优化算法。在获得解决方案后,应进行敏感性分析以找出由于某些参数的变化而导致的解决方案的行为。
  4. 模型有效性:检查模型是否按预期工作。
  5. 实施:将模型和结果转化为解决方案的建议。

线性规划
线性规划(也称为 LP)是一种运筹学技术,当所有目标和约束都是线性的(在变量中)并且所有决策变量都是连续的时。在层次结构中,线性规划可以被认为是最简单的运筹学技术。

Python 的SciPy库包含用于解决线性规划问题的linprog函数。使用linprog 时,在编写代码时需要考虑两个因素:

  1. 该问题必须被表述为一个最小化问题
  2. 不等式必须表示为 ≤

线性规划的标准形式如下,
首先,需要最小化式子z,定义为:
Python线性整数规划 python线性规划最优解_Python线性整数规划
其中, C为系数向量,X为待优化参数向量。上式的限制条件可以写为:
Python线性整数规划 python线性规划最优解_python_02
其中,A和B为系数矩阵。
举一个具体的例子:
Python线性整数规划 python线性规划最优解_Python线性整数规划_03

如果调用scipy中的linprog函数来解决上诉的线性规划最优化问题,代码如下:

# Import required libraries
import numpy as np
from scipy.optimize import linprog

# Set the inequality constraints matrix
# Note: the inequality constraints must be in the form of <=
A = np.array([[-1, -1, -1], [-1, 2, 0], [0, 0, -1], [-1, 0, 0], [0, -1, 0], [0, 0, -1]])

# Set the inequality constraints vector
b = np.array([-1000, 0, -300, 0, 0, 0])

# Set the coefficients of the linear objective function vector
c = np.array([10, 15, 25])

# Solve linear programming problem
res = linprog(c, A_ub=A, b_ub=b)

# Print results
print('Optimal value:', round(res.fun, ndigits=2),
      '\nx values:', res.x,
      '\nNumber of iterations performed:', res.nit,
      '\nStatus:', res.message)
Optimal value: 14500.0 
x values: [7.0000000e+02 7.1017063e-09 3.0000000e+02] 
Number of iterations performed: 7 
Status: Optimization terminated successfully.