最优化方法Python计算:线性规划的标准化

目标函数和约束函数均为线性函数的最优化问题
{ minimize c ⊤ x s.t.   A i q x ≤ b i q A e q x = b e q x ≥ o ( 1 ) \begin{cases} \text{minimize}\quad\quad\boldsymbol{c}^\top\boldsymbol{x}\\ \text{s.t.\ \ }\quad\quad\boldsymbol{A}_{iq}\boldsymbol{x}\leq\boldsymbol{b}_{iq}\\ \quad\quad\quad\quad\boldsymbol{A}_{eq}\boldsymbol{x}=\boldsymbol{b}_{eq}\\ \quad\quad\quad\quad\boldsymbol{x}\geq\boldsymbol{o} \end{cases}\quad\quad(1) minimizecxs.t.  AiqxbiqAeqx=beqxo(1)
称为线性规划问题。其中, c , x ∈ R n \boldsymbol{c},\boldsymbol{x}\in\text{R}^n c,xRn A i q ∈ R m i × n \boldsymbol{A}_{iq}\in\text{R}^{m_i\times n} AiqRmi×n b i q ∈ R m i \boldsymbol{b}_{iq}\in\text{R}^{m_i} biqRmi A e q ∈ R m e × n \boldsymbol{A}_{eq}\in\text{R}^{m_e\times n} AeqRme×n b e q ∈ R m e \boldsymbol{b}_{eq}\in\text{R}^{m_e} beqRme。问题的可行域 Ω = { x ∣ A i q x ≤ b i q , A e q x = b e q , x ≥ o } \Omega=\{\boldsymbol{x}|\boldsymbol{A}_{iq}\boldsymbol{x}\leq\boldsymbol{b}_{iq},\boldsymbol{A}_{eq}\boldsymbol{x}=\boldsymbol{b}_{eq},\boldsymbol{x}\geq\boldsymbol{o}\} Ω={xAiqxbiq,Aeqx=beq,xo},称为单纯形。为便于数值计算,常需要将上述线性规划的一般形式通过引入松弛变量转换为与之等价的标准型
{ minimize c ⊤ x s.t. A x = b x ≥ o ( 2 ) \begin{cases} \text{minimize}\quad\boldsymbol{c}^\top\boldsymbol{x}\\ \text{s.t.}\quad\quad\boldsymbol{Ax}=\boldsymbol{b}\\ \quad\quad\quad\quad\boldsymbol{x}\geq\boldsymbol{o} \end{cases}\quad\quad(2) minimizecxs.t.Ax=bxo(2)
其中, c , x ∈ R n \boldsymbol{c},\boldsymbol{x}\in\text{R}^n c,xRn A ∈ R m × n \boldsymbol{A}\in\text{R}^{m\times n} ARm×n b ∈ R m \boldsymbol{b}\in\text{R}^{m} bRm b ≥ o \boldsymbol{b}\geq\boldsymbol{o} bo。所谓引入松弛变量,指的是在不等式约束 A i q x ≤ b i q \boldsymbol{A}_{iq}\boldsymbol{x}\leq\boldsymbol{b}_{iq} Aiqxbiq添加 m i m_i mi个分量构成的非负向量 x s ≥ o \boldsymbol{x}_s\geq\boldsymbol{o} xso,转换成等式约束 ( A i q , I m i ) ( x x s ) = b i q . (\boldsymbol{A}_{iq},\boldsymbol{I}_{m_i})\begin{pmatrix}\boldsymbol{x}\\\boldsymbol{x}_s\end{pmatrix}=\boldsymbol{b}_{iq}. (Aiq,Imi)(xxs)=biq.
然后在等式约束 A e q x = b e q \boldsymbol{A}_{eq}\boldsymbol{x}=\boldsymbol{b}_{eq} Aeqx=beq改写成
( A e q , O m e × m i ) ( x x s ) = b e q . (\boldsymbol{A}_{eq},\boldsymbol{O}_{m_e\times m_i})\begin{pmatrix}\boldsymbol{x}\\\boldsymbol{x}_s\end{pmatrix}=\boldsymbol{b}_{eq}. (Aeq,Ome×mi)(xxs)=beq.
A U p = ( A i q , I m i ) \boldsymbol{A}_{Up}=(\boldsymbol{A}_{iq},\boldsymbol{I}_{m_i}) AUp=(Aiq,Imi) A L o = ( A e q , O m e × m i ) \boldsymbol{A}_{Lo}=(\boldsymbol{A}_{eq},\boldsymbol{O}_{m_e\times m_i}) ALo=(Aeq,Ome×mi),令 A = ( A U p A L o ) \boldsymbol{A}=\begin{pmatrix}\boldsymbol{A}_{Up}\\\boldsymbol{A}_{Lo}\end{pmatrix} A=(AUpALo) x = ( x x s ) \boldsymbol{x}=\begin{pmatrix}\boldsymbol{x}\\\boldsymbol{x}_s\end{pmatrix} x=(xxs) b = ( b i q b e q ) \boldsymbol{b}=\begin{pmatrix}\boldsymbol{b}_{iq}\\\boldsymbol{b}_{eq}\end{pmatrix} b=(biqbeq),则得到与线性规划(1)等价的标准形式(2),必要时,须维护向量 b \boldsymbol{b} b的非负性。下列代码实现以上标准化过程。

import numpy as np											#导入numpy
def standardizing(Aiq=None, biq=None, Aeq=None, beq=None):if isinstance(Aiq, np.ndarray):							#不等式约束非空mi = Aiq.shape[0]A = np.hstack((Aiq.copy(), np.eye(mi)))				#添加松弛变量b = biq.copy()										#常数向量else:													#不等式约束为空A = Noneb = Noneif isinstance(Aeq, np.ndarray):							#等式约束非空me = Aeq.shape[0]if isinstance(A, np.ndarray):						#与不等式约束连接A = np.vstack((A, np.hstack((Ae, np.zeros((me, mi))))))b = np.concatenate((b, beq), axis = 0)else:												#只有等式约束A = Aeq.copy()b = beq.copy()if isinstance(A, np.ndarray):							#维护常数向量的非负性m = A.shape[0]for i in range(m):if b[i] < 0:b[i] = -b[i]A[i] = -A[i]return A, b

程序的第2~24行定义的standardizing函数,对分别用Aiq,biq,Aeq,beq(缺省值为表示空集的None)表示的不等式约束系数矩阵 A i q \boldsymbol{A}_{iq} Aiq,常数向量 b i q \boldsymbol{b}_{iq} biq,等式约束系数矩阵 A e q \boldsymbol{A}_{eq} Aeq,常数向量 b e q \boldsymbol{b}_{eq} beq的线性规划(1)。
函数体内第3~9行的if-else语句,处理不等式约束。当其非空时,第5行通过在其右侧添加一个单位阵赋予A,执行添加 m i m_i mi个松弛变量的操作。第6行将biq拷贝给b。第10~17行的if-else语句处理等式约束。当其非空且不等式约束也非空时,第13行将在其右侧添加一个 m i × m e m_i\times m_e mi×me的零矩阵,并与第5行由不等式约束添加了松弛变量而得的矩阵A纵向连接赋予A,第17行将向量biq与beq连接赋予b。第20~23行的for循环维护向量b的非负性。返回值A和b表示标准型的约束系数矩阵 A \boldsymbol{A} A和常数向量 b \boldsymbol{b} b
例1 用上述程序定义的standardizing函数计算线性规划
{ minimize 3 x 1 − 2 x 2 + x 3 s.t.   2 x 1 + x 2 − x 3 ≤ 5 4 x 1 + 3 x 2 + x 3 ≥ 3 − x 1 + x 2 + x 3 = 2 x 1 , x 2 , x 3 ≥ 0 \begin{cases} \text{minimize}\quad\quad 3x_1-2x_2+x_3\\ \text{s.t.\ \ }\quad\quad\quad 2x_1+x_2-x_3\leq5\\ \quad\quad\quad\quad\quad 4x_1+3x_2+x_3\geq3\\ \quad\quad\quad\quad\quad -x_1+x_2+x_3=2\\ \quad\quad\quad\quad\quad x_1,x_2,x_3\geq0 \end{cases} minimize3x12x2+x3s.t.  2x1+x2x354x1+3x2+x33x1+x2+x3=2x1,x2,x30
的标准型等式约束矩阵和常数向量。
:问题的不等式约束矩阵和常数向量为
A i q = ( 2 1 − 1 − 4 − 3 − 1 ) , b i q = ( 5 − 3 ) \boldsymbol{A}_{iq}=\begin{pmatrix}2&1&-1\\-4&-3&-1\end{pmatrix},\boldsymbol{b}_{iq}=\begin{pmatrix}5\\-3\end{pmatrix} Aiq=(241311),biq=(53)
注意,第二个“大于等于”条件需转换成“小于等于”条件。等式约束系数矩阵和常数向量为
A e q = ( − 1 , 1 , 1 ) , b e q = ( 2 ) . \boldsymbol{A}_{eq}=(-1,1,1),\boldsymbol{b}_{eq}=(2). Aeq=(1,1,1),beq=(2).
下列代码完成计算。

import numpy as np									#导入numpy
from fractions import Fraction as F					#设置有理数输出格式
np.set_printoptions(formatter={'all':lambda x:str(F(x).limit_denominator())})
Ai = np.array([[2, 1, -1],							#不等式约束数据[-4, -3, -1]])
bi = np.array([5, -3])
Ae = np.array([[-1, 1, 1]])							#等式约束数据
be = np.array([2])
print(standardizing(Ai, bi, Ae, be))

程序的第2~4行设置输出的数据为有理数格式。第5~7行设置不等式约束数据,第8~9行设置等式约束数据。第10行中调用standardizing函数执行转换计算。运行程序,输出

(array([[2, 1, -1, 1, 0],[4, 3, 1, 0, -1],[-1, 1, 1, 0, 0]]), array([5, 3, 2]))

这意味着标准型的约束系数矩阵为 A = ( 2 1 − 1 1 0 4 3 1 0 − 1 − 1 1 1 0 0 ) \boldsymbol{A}=\begin{pmatrix}2&1&-1&1&0\\4&3&1&0&-1\\-1&1&1&0&0\end{pmatrix} A= 241131111100010 ,常数向量 b = ( 5 3 2 ) \boldsymbol{b}=\begin{pmatrix}5\\3\\2\end{pmatrix} b= 532 ,即对应的标准型线性规划是
{ minimize 3 x 1 − 2 x 2 + x 3 s.t.   2 x 1 + x 2 − x 3 + x 4 = 5 4 x 1 + 3 x 2 + x 3 − x 5 = 3 − x 1 + x 2 + x 3 = 2 x 1 , x 2 , x 3 , x 4 , x 5 ≥ 0 . \begin{cases} \text{minimize}\quad\quad 3x_1-2x_2+x_3\\ \text{s.t.\ \ }\quad\quad\quad 2x_1+x_2-x_3+x_4=5\\ \quad\quad\quad\quad\quad 4x_1+3x_2+x_3-x_5=3\\ \quad\quad\quad\quad\quad -x_1+x_2+x_3=2\\ \quad\quad\quad\quad\quad x_1,x_2,x_3,x_4,x_5\geq0 \end{cases}. minimize3x12x2+x3s.t.  2x1+x2x3+x4=54x1+3x2+x3x5=3x1+x2+x3=2x1,x2,x3,x4,x50.
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

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

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

相关文章

微机原理与接口技术:重点内容|计算机系统|学习笔记

系列目录 前言 只将最重要的知识点考点列出来方便学习复习 目录 系列目录前言第1章 微型计算机概述第2章 16位和32位微处理机&#x1f31f;16位微处理器 8086 第3章 Pentium 的指令系统常用指令 第4章 存储器、存储管理和高速缓存技术第5章 微型计算机和外设的数据传输第6章 串…

Socket网络编程基础教程

Socket网络编程基础教程 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨Java中的Socket网络编程&#xff0c;这是实现网络通信的重要基础。 …

echarts进度环叠加背景图

vue组件实现&#xff1a; <template><div class"ringWrap" :style"{transform:scale(${scale})}"><!-- 圆环 --><div :id"chartId" :style"{width:220px,height:220px,transform:scale(${scale})}"></div…

一个适用于标准普通 WordPress 博客站点的 CloudFlare 缓存规则

长期以来很多 WordPress 站长们都以为 WordPress 这样的动态博客网站系统的 CDN 缓存效果是有限的,尤其是 WordPress 伪静态后的.html 是无法被 CDN 完美缓存的。其实这个是跟你的博客网站架构有关系,如果你的 WordPress 网站用的是单用户模式(就是只需要网站管理员登录,不…

【JavaScript】var, let, const区别

提出 var是ES5提出的&#xff0c;let和const是ES6提出的。 作用域不同 let和const具有块级作用域&#xff0c;var不存在块级作用域,可以跨块访问, 不能跨函数访问 // 全局 var a 10 console.log(a) // 10const test (c) > {var b 20console.log(b) // 20&#xff0c;…

[单master节点k8s部署]13.statefulSet

statefulSet 为每一个pod提供一个稳定的、唯一的网络标识符&#xff0c;每个 Pod 通过 PersistentVolumeClaim (PVC) 获得自己的存储。即使 Pod 被重新调度到另一个节点&#xff0c;这个 PVC 也会被重新挂载到正确的 Pod 上&#xff0c;保证存储的稳定性。 statefulset创建的p…

LeetCode-213. 打家劫舍 II【数组 动态规划】

LeetCode-213. 打家劫舍 II【数组 动态规划】 题目描述&#xff1a;解题思路一&#xff1a;分三种情况&#xff0c;一&#xff1a;不考虑头尾&#xff1b;二&#xff1a;考虑头不考虑尾&#xff1b;三&#xff1a;考虑尾不考虑头。解题思路二&#xff1a;优化空间解题思路三&am…

Android笔记-adb keycode大全

使用方法 用adb发送按键事件时&#xff0c;可以使用下面表中的枚举值或者直接使用数值&#xff0c;比如 adb shell input keyevent KEYCODE_HOME 或者 adb shell input keyevent 3 下面按三种排序方法列出所有按键的 keycode&#xff0c; 分别是&#xff1a; 按功能分 按枚…

C++ 设计模式之命令模式

C 设计模式之命令模式 简介 1、命令模式 &#xff08;Command&#xff09;是一种行为型设计模式&#xff0c;它将一个请求封装为一个对象&#xff0c;从而使您可以用不同的请求对客户进行参数化&#xff1b;对请求排队或记录请求日志&#xff0c;以及支持可撤销的操作。 2、…

浏览器userAgent大全及JS判断当前APP

文章目录 userAgent 检测PC/Mobile 浏览器 userAgent 大全Mobile APP userAgent 大全JS 判断当前 APP userAgent 检测 https://useragent.buyaocha.com/ PC/Mobile 浏览器 userAgent 大全 系统浏览器User-Agent字符串MacChromeMozilla/5.0 (Macintosh; Intel Mac OS X 10_12…

vue数组套对象,在动态加入属性:属性值, 导致数据不更新

一 、案例效果 [{a: 1,b:2},{a: 1,b:2}, toggle:true]导致视图不更新且数据没有响应式。这种格式是数组套对象的&#xff0c;之后由于不想在遍历一层数据变成[{a: 1,b:2,toggle:true},{a: 1,b:2,oggle:true} ] ,就直接加在对象后面了【虽然这样写法不对&#xff0c;但是&#…

LLM端侧部署系列 | 陈天奇MLC-LLM重磅升级:基于机器学习编译的通用LLM部署引擎

引言 简介 MLCEngine的聊天功能 OpenAI风格API 云端REST API Python API iOS SDK Android SDK WebLLM SDK 小结 结构化生成 支持各种平台 优化引擎性能 总结 引言 流星透疏水&#xff0c;走月逆行云。 小伙伴们好&#xff0c;我是《小窗幽记机器学习》的小编&am…

如何获取泛型参数【Java】

对于一个基本的类 public class BaseDao<T>{T findOne() {return T;} }它的子类 public class StudentDao extends BaseDao<StudentDao.Student>{public static class Student{}}如何获得当前类对应的泛型参数呢&#xff1f; 方法一 JDK public static void ma…

关于onlyoffice回调函数的问题

参考文档1&#xff1a;https://api.onlyoffice.com/zh/editors/callback 在官方文档中描述的十&#xff0c;文档存储服务的回调函数&#xff0c;必须要返回 {"error": 0}表示成功&#xff0c;否则将提示错误信息。 但是经过实测&#xff0c;我们只需要正常的返回2…

力扣2874.有序三元组中的最大值 II

力扣2874.有序三元组中的最大值 II 遍历j –> 找j左边最大数 和右边最大数 class Solution {public:long long maximumTripletValue(vector<int>& nums) {int n nums.size();vector<int> suf_max(n1,0);//右边最大数for(int in-1;i>1;i--){suf_max[i…

Mysql - 数据库备份和恢复

当涉及到数据库管理时&#xff0c;数据库备份和恢复是非常关键的操作。备份可以保护数据库中的重要数据免受意外删除、数据库故障或者恶意攻击的影响。同时&#xff0c;恢复操作可以帮助我们在发生意外情况时快速恢复数据库到之前的状态。在这篇文章中&#xff0c;我们将深入探…

每日一题——Python实现PAT乙级1090 危险品装箱(举一反三+思想解读+逐步优化)4千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 题目链接&#xff1a;https://pintia.cn/problem-sets/994805260223102976/exam/problems/typ…

STL工程问题

文章目录 1. vector迭代器失效问题1.1. 情况1&#xff1a;扩容导致迭代器失效1.2. 情况2&#xff1a;删除导致迭代器失效1.3. 情况3&#xff1a;尾删导致迭代器失效 2. STL怎么做内存管理3. 如何解决哈希冲突&#xff1f;4. vector手动释放内存问题5. 对象池思想 1. vector迭代…

基于SSM的校园闲置物品交易平台

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SSM的校园闲置物品交易平台,java项目…

Advanced RAG 09:『提示词压缩』技术综述

编者按&#xff1a; 如何最大限度地发挥 LLMs 的强大能力&#xff0c;同时还能控制其推理成本&#xff1f;这是当前业界研究的一个热点课题。 针对这一问题&#xff0c;本期精心选取了一篇关于"提示词压缩"(Prompt Compression)技术的综述文章。正如作者所说&#xf…