线性规划案例分享

今天想写一个最优传输的简单实现,结果学歪了,学到线性规划去了,这里我发现了一个宝藏网站
虽然是讲计量经济的,但是里面提供的公式和代码我很喜欢,有时间可以好好读一下
https://python.quantecon.org/lp_intro.html

参考博客
https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.linprog.html

https://python.quantecon.org/lp_intro.html

example1

在这里插入图片描述

图解法

import numpy as np
from scipy.optimize import linprog
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon

fig, ax = plt.subplots(figsize=(8, 6))
ax.grid()

# Draw constraint lines
ax.hlines(0, -1, 17.5)
ax.vlines(0, -1, 12)
ax.plot(np.linspace(-1, 17.5, 100), 6-0.4*np.linspace(-1, 17.5, 100), color="c")## 画一条直线
ax.plot(np.linspace(-1, 5.5, 100), 10-2*np.linspace(-1, 5.5, 100), color="c") ## 画一条直线
ax.text(1.5, 8, "$2x_1 + 5x_2 \leq 30$", size=12)
ax.text(10, 2.5, "$4x_1 + 2x_2 \leq 20$", size=12)
ax.text(-2, 2, "$x_2 \geq 0$", size=12)
ax.text(2.5, -0.7, "$x_1 \geq 0$", size=12)

# Draw the feasible region
feasible_set = Polygon(np.array([[0, 0],
                                 [0, 6],
                                 [2.5, 5],
                                 [5, 0]]),
                       color="cyan")
ax.add_patch(feasible_set)

# Draw the objective function
ax.plot(np.linspace(-1, 5.5, 100), 3.875-0.75*np.linspace(-1, 5.5, 100), color="orange")
ax.plot(np.linspace(-1, 5.5, 100), 5.375-0.75*np.linspace(-1, 5.5, 100), color="orange")
ax.plot(np.linspace(-1, 5.5, 100), 6.875-0.75*np.linspace(-1, 5.5, 100), color="orange")
ax.arrow(-1.6, 5, 0, 2, width = 0.05, head_width=0.2, head_length=0.5, color="orange")
ax.text(5.7, 1, "$z = 3x_1 + 4x_2$", size=12)

# Draw the optimal solution
ax.plot(2.5, 5, "*", color="black")
ax.text(2.7, 5.2, "Optimal Solution", size=12)

plt.show()

结果如下,这个图还蛮好看的
在这里插入图片描述

python代码 - solution

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import linprog
from quantecon.optimize.linprog_simplex import linprog_simplex
import ot
from scipy.stats import betabinom
import networkx as nx
# Define parameters

# Construct parameters
c_ex1 = np.array([3, 4])

# Inequality constraints
A_ex1 = np.array([[2, 5],
                  [4, 2]])
b_ex1 = np.array([30,20])

# Solve the problem
# we put a negative sign on the objective as linprog does minimization
res_ex1 = linprog(-c_ex1, A_ub=A_ex1, b_ub=b_ex1)

res_ex1

结果如下
在这里插入图片描述

matlab代码-solution

%% example1
clc;
clear;
c=[-3,-4];			% 价值向量
a_inequ=[2,5;4,2];	% a、b对应不等式的左边和右边
b_inequ=[30;20];
a_eq=[];			% aeq和beq对应等式的左边和右边
b_eq=[];
[x,y]=linprog(c,a_inequ,b_inequ,a_eq,b_eq,zeros(2,1));
fprintf("x=[%3f,%3f]\n",x);
fprintf("y=[%3f]\n",y);
%

结果如下
在这里插入图片描述

example2

在这里插入图片描述

python代码

from scipy.optimize import linprog
c = [-1, 4]
A = [[-3, 1], [1, 2]]
b = [6, 4]
x0_bounds = (None, None)
x1_bounds = (-3, None)
res = linprog(c, A_ub=A, b_ub=b, bounds=[x0_bounds, x1_bounds])
print(res.fun)
print(res.x)

结果如下
在这里插入图片描述

matlab代码


%%example2
clc;
clear;
c=[-1,4];			% 价值向量
a_inequ=[-3,1;1,2];	% a、b对应不等式的左边和右边
b_inequ=[6;4];
a_eq=[];			% aeq和beq对应等式的左边和右边
b_eq=[];
lb = [-inf,-3]; % 这里不要写成了lb=[-3,-inf],否则无界
ub =[];
[x,y]=linprog(c,a_inequ,b_inequ,a_eq,b_eq,lb,ub);
fprintf("x=[%3f,%3f]\n",x);
fprintf("y=[%3f]\n",y);

在这里插入图片描述

example3

在这里插入图片描述

python代码


from scipy.optimize import linprog
import numpy as np

c = [-1,-1/3]
a_inequ = np.array([[1, 1],
    [1 ,1/4],
    [1 ,-1],
    [-1/4, -1],
    [-1, -1],
    [-1 ,1]])

b_inequ = np.array([2, 1, 2 ,1 ,-1 ,2]);

a_eq =np.array([[1, 1/4]]);
b_eq = np.array([1/2]);

x0_bounds = [-1,1.5];
x1_bounds = [-0.5,1.25];

res = linprog(c, A_ub=a_inequ, b_ub=b_inequ,A_eq=a_eq,b_eq=b_eq, bounds=[x0_bounds, x1_bounds])

print(res.x)
print(res.fun)

结果如下
在这里插入图片描述

matlab代码

clc;
clear;
c = [-1 -1/3];
a_inequ  = [1 1; 1 1/4;
            1 -1; -1/4 -1;
           -1 -1;-1 1];
b_inequ = [2 1 2 1 -1 2];
a_eq = [1 1/4];
b_eq = 1/2;
lb = [-1,-0.5];
ub = [1.5,1.25];
[x,y] = linprog(c,a_inequ,b_inequ,a_eq,b_eq,lb,ub);
fprintf("x=[%3f,%3f]\n",x);
fprintf("y=[%3f]\n",y);

在这里插入图片描述嘿嘿,先到这里吧

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【咕咕送书 | 第八期】羡慕同学进了大厂核心部门,看懂这本书你也能行!

🎬 鸽芷咕:个人主页 🔥 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! ⛳️ 写在前面参与规则 ✅参与方式:关注博主、点赞、收藏、评论,任意评论(每人最多评论…

git本地分支的合并

目录 第一章、本地分支的切换测试1.1)切换之前的master分支下文件内容1.2)切换到develop分支后修改文件1.3)切回master分支出现报错:1.4)报错分析 第二章、解决方式2.1)方式1:commit2.2&#xf…

LabVIEW振动筛螺栓松动故障诊断

LabVIEW振动筛螺栓松动故障诊断 概述:利用LabVIEW解决振动筛螺栓松动的故障诊断问题。通过集成的方法,不仅提高了故障检测的准确性,还优化了维护流程,为类似的机械设备故障提供了可靠的解决方案。 由于工作条件复杂,…

SSM汽车维修管理系统

工具使用情况: eclipsetomcatmysqljdk 技术架构: 后台:springspring mvcmybatis 前台:easyui 功能介绍: 汽车维修管理、车辆接待、维修项目登记、维修领料、质检完工、消费结算 配件管理、财务管理、基础数据管理…

SpringSecurity Web 权限方案

目录 一、设置登录系统的账号、密码 二、数据库查询用户名密码 三、自定义登录页面 四、基于角色或权限进行访问控制 (一)hasAuthority 方法 (二)hasAnyAuthority 方法 (三)hasRole 方法 &#xff…

九州金榜|在孩子家庭教育中放手不放任

家庭教育,是每个父母都要面临的事情,也是每个家庭都要经历的,但是在目前的家庭教育中,孩子都是由父母规划,在一定程度上会对孩子的成长产生影响,如何科学家庭教育,九州金榜家庭教育有以下观点&a…

JVM:垃圾收集器(7种)

垃圾收集器关系图: 如果两个收集器之间存在连线,就说明它们可以搭配使用。它们说在的区域则表示这个收集器属于新生代收集器还是老年代收集器。其中Serial(串行)、Parallel(并行) 1、Serial收集器 Serial收…

ASP.NET Core 对象池化技术

写在前面 Microsoft.Extensions.ObjectPool 是 ASP.NET Core 基础结构的一部分,当对象的初始化成本较高,并且可能被频繁使用时,才适合采用对象池技术;被ObjectPool管理的对象不会进入垃圾回收,使用时通过由实例对象实…

市场复盘总结 20240119

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整,采用龙空龙模式 昨日主题投资 连板进级率 11/39 28.2% 二进三: 进级率低 43% 最常用的二种方法: 方…

[AI]文心一言爆火的同时,ChatGPT-4.5的正确打开方式

前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言4.5key价格泄漏ChatGPT4.0使用地址ChatGPT正确打开方式最新功能语音助手存档…

【PICO】【VRTK】PICO项目后打包后在头盔中运行时不追踪

【背景】 PICO项目打包后可以在头盔中运行,但是画面是贴脸移动的,无法发生有效的空间追踪。 【解决办法】 我的Unity版本是2021.3.30LTS,ProjectSettings中的NetFramework默认是2.1。改到NetFramework后再打包就正常了。

安捷伦N5222A网络分析仪26.5GHz

安捷伦N5222A网络分析仪 N5222A 是 Agilent 的 26.5 GHz 网络分析仪。网络分析仪是一种功能强大的仪器,可以以无与伦比的精度测量射频设备的线性特性。许多行业使用网络分析仪来测试设备、测量材料和监控信号的完整性。 附加功能: 10 MHz 至 26.5 GHz 2…

el-table样式错乱解决方案

bug: 图片的椭圆框住的地方,在页面放大缩小之后就对不齐了。 原因: 主要原因是当你对页面放大缩小的时候,页面进行了重构,页面的宽高及样式进行了变化,但是在这个更新的过程中,table的反应并没…

git使用的常用指令

git作为一个版本控制工具,和maven并合称为实习的两大杀手工具。今天我来给大家介绍一下git的常用指令,帮助大家在实习和多人协同开发的时候提供一些帮助。 找到git管理的文件夹 命令1 git init 这个命令是为了初始化本地库 命令2 查看当前的git状态…

怎么做表单链接_从表单链接到营销策略

从表单链接到营销策略:一场无与伦比的转化之旅 在数字营销的世界里,表单链接是一种至关重要的元素。它不仅是一个简单的链接,更是企业与潜在客户之间建立联系的桥梁。如何将表单链接巧妙地融入营销策略,让潜在客户转化为真正的客…

JUC并发编程-线程和进程、Synchronized 和 Lock、生产者和消费者问题

1、什么是JUC 源码 官方文档 面试高频问! java.util 工具包、包、分类 业务:普通的线程代码 Thread Runnable Runnable 没有返回值、效率相比入 Callable 相对较低! 2、线程和进程 线程、进程,如果不能使用一句话说出来的技术…

力扣36. 有效的数独

模拟 思路: 使用三个哈希表来存储数字个数 row[r][val] 用于存储第 r 行 val 1 的个数;column[c][val] 用于存储第 c 列 val 1 的个数; subboxes[i][j][val] 用于存储第 i 行、第 j 列个小九宫格 val 1 的个数,其中&#xff1…

论文笔记:基于CLIP引导学习的多模式假新闻检测

整理了ICME2023 Multimodal Fake News Detection via CLIP-Guided Learning)论文的阅读笔记 背景模型实验 背景 对于我们这一代人来说,在线社交网络在很大程度上取代了以报纸和杂志为代表的传统信息交流方式。人们喜欢在社交媒体上寻找朋友或分享观点。然…

Linux系统安装NFS服务器

NFS是一种网络文件系统,英文全称Network File System,通过NFS可以让不同的主机系统之间共享文件或目录。通过NFS,用户可以直接在本地NFS客户端读写NFS服务端上的文件,是非常好的共享存储工具。本篇文章将介绍如何在CentOS7上安装N…

2024年【G2电站锅炉司炉】考试报名及G2电站锅炉司炉复审考试

题库来源:安全生产模拟考试一点通公众号小程序 G2电站锅炉司炉考试报名是安全生产模拟考试一点通生成的,G2电站锅炉司炉证模拟考试题库是根据G2电站锅炉司炉最新版教材汇编出G2电站锅炉司炉仿真模拟考试。2024年【G2电站锅炉司炉】考试报名及G2电站锅炉…