【Python】线性规划模型(笔记)

news2024/9/22 15:30:29

线性规划的作用

求一个线性目标函数在线性可行域内的最值问题

线性规划的典型应用

  • 配送运输问题:选大车还是小车
  • 生产规划问题:每种原料各买多少
  • 几何切割问题:切割长宽各多少
  • 买卖利润问题:最多能挣多少钱

线性规划的本质

问题是线性的
约束是线性的

线性代数基本概念

线性代数基本概念:向量

向量的基本运算:
![[Pasted image 20240814153235.png]]

向量的集合:矩阵
这里不细讲了,忘了就复习线性代数

运用Python进行矩阵运算

  1. 首先导入numpy库
import numpy as np
  1. 使用np.array创建矩阵
a = np.array([[1,2,3],[4,5,6]])
b = np.array([[1,2],[3,4],[5,6]])
c = np.array([[1,2,3]])
d = np.array([[9,8,7],[3,2,1]])
  1. 矩阵加法和数乘
sum = a + b #加法
e = 3 * a #数乘
  1. 使用np.dot进行矩阵相乘
e = np.dot(a, b)
  1. 元素乘(要求行列一致)
e = a * d
  1. 矩阵转置
e = c.T
  1. 使用np.linalg.inv求逆
result = np.linalg.inv(e)
  1. 使用np.linalg.det求行列式
reslut = np.linalg.det(e)
  1. 使用np.linalg.matrix_rank求矩阵的秩
e = np.linalg.matrix_rank(d)

运用Python求解一次方程组

例如:
{ 10 x − y − 2 z = 72 − x + 10 y − 2 z = 83 − x − y + 5 z = 42 ) \left\{\begin{aligned} 10 x-y-2 z= & 72 \\ -x+10 y-2 z= & 83 \\ -x-y+5 z= & 42 \end{aligned}\right) 10xy2z=x+10y2z=xy+5z=728342

解法:
x = A − 1 b x=A^{-1} b x=A1b

求数值解:使用numpy库

import numpy as np  
  
A = np.array([[10, -1, -2], [-1, 10, -2], [-1, -1, 5]])  # A为系数矩阵  
b = np.array([72, 83, 42])  # b为常数列  
inv_A = np.linalg.inv(A)  # 求A的逆矩阵  
x = inv_A.dot(b)  # A的逆矩阵点乘b  
x = np.linalg.solve(A, b)  # 5,6行可用本行替代  
print(x)

结果:[11. 12. 13.]

我们还可以使用sympy库求符号解或数值解:

from sympy import symbols, Eq, solve  
  
x, y, z = symbols('x y z')  
# 直接写入方程形式
eqs = [Eq(10 * x - y - 2 * z, 72),  
       Eq(-x + 10 * y - 2 * z, 83),  
       Eq(-x - y + 5 * z, 42)]  
print(solve(eqs, [x, y, z]))

结果:{x: 11, y: 12, z: 13}

从矩阵角度思考线性规划的标准形式

  1. 不等式组条件矩阵化
  2. 方程组条件矩阵化
  3. 写出变量自身的取值范围
  4. 把目标函数向量化
  5. 求极值

用程序做线性规划问题时的规范形式:
min ⁡ x c T x  s.t.  { A x ≤ b A e q ⋅ x = b e q l b ≤ x ≤ u b \begin{aligned} & \min _x c^T x \\ & \text { s.t. }\left\{\begin{array}{l} A x \leq b \\ A e q \cdot x=b e q \\ l b \leq x \leq u b \end{array}\right. \end{aligned} xmincTx s.t.  AxbAeqx=beqlbxub

  1. 求一个线性函数的极小值
  2. 不等式约束一定是小于等于号

线性规划的三要素:决策变量、目标函数、约束条件

线性规划的Python程序求解

例:

max ⁡ z = 2 x 1 + 3 x 2 − 5 x 3 \max \quad z=2 x_1+3 x_2-5 x_3 maxz=2x1+3x25x3
s . t . { x 1 + x 2 + x 3 = 7 2 x 1 − 5 x 2 + x 3 > = 10 x 1 + 3 x 2 + x 3 < = 12 x 1 , x 2 , x 3 > = 0 s.t. \left\{\begin{array}{l}x_1+x_2+x_3=7 \\ 2 x_1-5 x_2+x_3>=10 \\ x_1+3 x_2+x_3<=12 \\ x_1, x_2, x_3>=0\end{array}\right. s.t. x1+x2+x3=72x15x2+x3>=10x1+3x2+x3<=12x1,x2,x3>=0

前面提到,规范形式中要求极小值,且不等式约束必须是小于等于号

所以目标函数和第一条不等式需要乘以-1

import numpy as np  
from scipy import optimize  
  
# 向量化  
c = np.array([-2, -3, 5])  # 乘以-1变为求极小值  
Aeq = np.array([[1, 1, 1]])  # 方程  
beq = np.array([7])  
A = np.array([[-2, 5, -1], [1, 3, 1]])  # 不等式  
b = np.array([-10, 12])  
x1, x2, x3 = (0, None), (0, None), (0, None) # 范围 
  
res = optimize.linprog(c, A, b, Aeq, beq, bounds=(x1, x2, x3)) # 计算
print(res)

结果:

message: Optimization terminated successfully. (HiGHS Status 7: Optimal)
        success: True
         status: 0
            fun: -14.571428571428571 # 最优函数值(因为要取最大值所以结果要取fun的相反数)
              x: [ 6.429e+00  5.714e-01  0.000e+00] # x的结果
            nit: 3 # 3轮计算得出结果
          lower:  residual: [ 6.429e+00  5.714e-01  0.000e+00]
                 marginals: [ 0.000e+00  0.000e+00  7.143e+00]
          upper:  residual: [       inf        inf        inf]
                 marginals: [ 0.000e+00  0.000e+00  0.000e+00]
          eqlin:  residual: [ 0.000e+00]
                 marginals: [-2.286e+00]
        ineqlin:  residual: [ 0.000e+00  3.857e+00]
                 marginals: [-1.429e-01 -0.000e+00]
 mip_node_count: 0
 mip_dual_bound: 0.0
        mip_gap: 0.0

算法的特性:输入、输出、有穷性、确定性、可行性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2039084.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

6 二进制、十进制、八进制和十六进制的概念与进制转换,原码、反码、补码的概念与计算

目录 1 进制 1.1 常见的进制 1.2 不同进制的整数在 C 语言中的写法 1.3 printf 以不同进制形式输出整数 1.4 案例&#xff1a;使用不同的进制形式输出同一整数 2 进制的转换 2.1 二进制与十进制转换 2.1.1 二进制转换成十进制 2.1.2 十进制转换成二进制 2.2 八进制和…

pygame 赛亚人打怪

笔者最近学了一点pygame&#xff0c;献丑了。 代码附上&#xff0c;大佬勿喷&#xff01; import random import timeimport pygameWIDTH 410 HEIGHT 750 ENEMY_BORN pygame.USEREVENT 1 BULLET_BORN pygame.USEREVENT 10 ENEMY_BULLET_BORN pygame.USEREVENT 100 REW…

2024年最新版小程序云开发数据模型的开通步骤,支持可视化数据库管理,支持Mysql和NoSql数据库,可以在vue3前端web里调用操作

小程序官方又改版了&#xff0c;搞得石头哥不得不紧急的再新出一版&#xff0c;教大家开通最新版的数据模型。官方既然主推数据模型&#xff0c;那我们就先看看看新版的数据模型到底是什么。 一&#xff0c;什么是数据模型 数据模型是什么 数据模型是一个用于组织和管理数据的…

Linux信号控制进程种类、内存查看和NICE优先级

1.信号种类 1&#xff09;SIGHUP 重新加载配置 2&#xff09;SIGINT 键盘中断CtrlC 3&#xff09;SINGQUIT 键盘退出Ctrl\ 9&#xff09;SIGKILL 强制终止 15&#xff09;SIGTERM 正常结束终止 18&#xff09;SIGCONT 继续 19&#xff09;SIGSTOP…

使用克隆软件克隆Windows 10 硬盘

为什么 Windows 用户要克隆硬盘驱动器 您打算将旧硬盘升级为新硬盘吗&#xff1f;是否可以将操作系统迁移到 SSD&#xff1f;如何制作硬盘的相同副本&#xff1f;如何安全地升级操作系统而不会出现可启动故障问题&#xff1f;是否有任何安全便捷的方法可用于传输数据并升级到更…

Linux 中断机制(二)之中断子系统框架

目录 一、概述二、中断控制器 GIC1、Distributor 接口2、Redistributor 接口3、CPU 接口 三、中断类型四、中断号五、中断申请函数1、request_irq 函数2、request_threaded_irq() 函数3、gpio_to_irq 函数4、free_irq 函数 六、中断服务函数 一、概述 一个完整的中断子系统框架…

zdppy+vue3+onllyoffice开发文档管理系统实战 20240814上课笔记 验证码功能的进一步优化

遗留问题 1、实现验证码的功能2、要记录登录的Token和用户名&#xff0c;跳转到首页3、注册功能4、用户管理5、角色管理6、权限管理7、分享功能 当前进度 目前我们已经封装了zdppy_captcha这个框架&#xff0c;这个框架是专门用来生成验证码的。 缺少一些功能&#xff1a; …

024集——批量复制文字样式、改变文本文字样式——vba代码实现

CAD vba 不可直接修改文字样式的名称&#xff0c;可复制文字样式&#xff0c;文字样式名称前加特定前缀 要为对象改变文字样式&#xff0c;可使用 StyleName 属性。 If ent.ObjectName "AcDbText" Then ent.StyleName "新的" Set sel creatsel("…

【C#】读取与写入txt文件内容

在 C# 中读取和写入文本文件内容是一个常见的任务。以下是使用几种不同方法读取和写入文本文件的示例。 一、读取txt文件内容 1.1 使用 StreamReader using System; using System.IO;class Program {static void Main(){string filePath "C:\path\to\your\file.txt&qu…

【Unity打包Android】Gradle报错,Deprecated Gradle features were used in this build ···

Unity 2020.3.41f1c1 打包Android 加入Google Admob广告SDK后&#xff0c;打包Android失败&#xff0c;具体报错如下&#xff1a; 报错1&#xff1a; Starting a Gradle Daemon, 2 stopped Daemons could not be reused, use --status for details> Configure project :l…

Hutool找出对象修改前后的字段变化

首先Maven引入Hutool依赖&#xff1a; <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.21</version> <!-- 请根据实际最新版本调整 --></dependency> 测试&#xff1a; 1…

OpenAI API error: “Unrecognized request argument supplied“

题意&#xff1a;OpenAI API 错误&#xff1a;‘提供了无法识别的请求参数’ 问题背景&#xff1a; Im receiving an error when calling the OpenAI API. Its not recognizing file argument, which I submitted to the API. 我在调用 OpenAI API 时遇到错误。API 不识别我提…

python语言day6 os random datetime .ini文件

os&#xff1a; 获取运行当前py文件的绝对路径&#xff1a; abspath中添加路径&#xff0c;会直接和绝对路径拼接。 folder_path os.path.abspath("") print(folder_path) 路径拼接&#xff1a; mac系统路径&#xff1a;file/TranslucentTB win系统路径&#xff1a;…

日撸Java三百行(day23:使用具有通用性的队列)

目录 前言 一、基础知识准备 1.Object类 2.Integer类 2.1包装类 2.2装箱和拆箱 2.3Integer类的常见方法 二、代码实现 1.队列创建及初始化 2.方法创建 3.数据测试 4.完整的程序代码 总结 前言 在昨天&#xff0c;我们使用了两个队列来辅助完成二叉树的“压缩顺序…

Android gradle 构建

Understanding Tasks - Gradle task kapt 是 Kotlin 语言的注解处理器&#xff0c;它是 Android Studio 中用于处理 Kotlin 注解的工具。它通过在编译期间生成代码来增强 Kotlin 代码的功能。需要 Kotlin 编译器来解析和处理注解&#xff1b;使用 APT 来生成代码&#xff0c…

【通天星主动安全监控云平台信息泄露漏洞】

目录 一、漏洞简介 二、资产测绘 三、poc利用 四、脚本批量验证 一、漏洞简介 “通天星主动安全监控云平台”是一个基于云计算技术的安全监控平台&#xff0c;通常用于保障网络安全、工业控制系统安全或物联网设备的安全。该信息泄露漏洞位于接口&#xff1a;/808gps/Stand…

可移植性(兼容性)测试指南

可移植性是指应用程序能够安装到不同的环境中&#xff0c;在不同的环境中使用&#xff0c;甚至可以移动到不同的环境中。当然&#xff0c;前两者对所有系统都很重要。就PC软件而言&#xff0c;鉴于操作系统、共存和互操作应用程序、硬件、带宽可用性等方面的快速变化&#xff0…

JavaScript秒值转换为年月日时间字符串

当前效果&#xff1a; 因为后端传递过来的是秒值&#xff0c;显示的时候也是秒值。 但是这种不太友好&#xff0c;所以需要转换为 “xxxx年xx月xx日 xx:xx:xx” 的格式。 参考代码&#xff1a; formatDate (now) {const date new Date(now)var y date.getFullYear() // 年…

Springboot3 自定义全局异常与异常捕获

全局异常构建 package com.lingyang.system.util.exception;import lombok.Getter;/*** author **文* Description:* createDate 2024/8/8 15:20**/ Getter public class TokenErrotException extends RuntimeException{private final String errorMessage;public TokenErrotE…