线性规划案例分享

news2024/11/27 22:37:37

今天想写一个最优传输的简单实现,结果学歪了,学到线性规划去了,这里我发现了一个宝藏网站
虽然是讲计量经济的,但是里面提供的公式和代码我很喜欢,有时间可以好好读一下
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);

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

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

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

相关文章

Civil 3D安装教程,免费使用,带安装包和工具,一分钟轻松搞的安装

前言 Civil 3D是一款面向基础设施行业的建筑信息模型(BIM)解决方案。它为基础设施行业的各类技术人员提供了强大的设计、分析以及文档编制功能,广泛适用于勘察测绘、岩土工程、交通运输、水利水电、市政给排水、城市规划和总图设计等众多领域…

什么是比特币?

比特币 比特币 (英语:Bitcoin,缩写:BTC )是一种基于 去中心化,采用 点对点网络,开放源代码,以 区块链 作为底层技术的 加密货币。比特币由 中本聪(Satoshi Nakamoto&…

vscode配置web开发环境(WampServer)

这里直接去下载了集成的服务器组件wampserver,集成了php,MySQL,Apache 可能会出现安装问题,这里说只有图上这些VC包都安装了才能继续安装,进入报错里提供的链接 在页面内搜索相关信息 github上不去可以去镜像站 下载…

机器视觉技术与应用实战(平均、高斯、水平prewitt、垂直prewitt、水平Sobel、垂直Sobel、拉普拉斯算子、锐化、中值滤波)

扯一点题外话,这一个月经历了太多,接连感染了甲流、乙流,人都快烧没了,乙流最为严重,烧了一个星期的38-39度,咳嗽咳到虚脱。还是需要保护好身体,感觉身体扛不住几次连续发烧!&#x…

Redis 持久化之 RDB AOF

1、简介 Redis 是一个基于内存的 key-value 类型的 Nosql 数据库,经常用来做缓存操作,但是一旦Redis 宕机,重启之后数据会丢失,因此,需要将内存数据进行持久化,保证服务重启后数据能够恢复之前的状态。Redi…

淘金城镇新人赚钱攻略(定制开发·源码定制智创开发)

​ 在淘金城镇中,玩家可以通过完成任务、升级角色、参与活动等方式获得丰厚的奖励和经验值,这不仅可以提升角色的能力, 还可以让玩家在游戏中获得更多的乐趣。最重要的是,淘金城镇的玩法非常精致,玩家可以通过游戏中…

C++——vector的使用及其模拟实现

vector的使用及其模拟实现 文章目录 vector的使用及其模拟实现1. vector的使用1.1 构造函数construct1.2 获取当前存储的数据个数size()和最大容量capacity()1.3 访问1.3.1 operator[]运算符重载1.3.2 迭代器访问1.3.3 范围for 1.4 容量相关reserve()和resize()1.5 增&#xff…

软件测试的工作描述

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

【算法练习Day50】下一个更大元素II接雨水

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 下一个更大元素II接雨水单调…

ESP32-CAM带摄像头的开发板使用-环境安装

首先是需要在开发板上搭建环境,其实就是将安装包给下载到开发板上,然后程序能在开发板上运行并控制开发板,这一下载过程也称为烧录。 首先我这里使用ESP32-CAM纯粹是因为便宜,所以买啦 哈哈哈 我买的是30多带摄像头的&#xff0c…

SpringMVC传递数据给前台

SpringMVC有三种方式将数据提供给前台 第一种 使用Request域 第二种 使用Model(数据默认是存放在Request域中) 与第一种方式其实是一致的 第三种 使用Map集合(数据默认是存放在Request域中)

虹科分享 | 汽车技术的未来:Netropy如何测试和确保汽车以太网的性能

文章速览: 什么是汽车以太网?汽车以太网的用途是什么?汽车以太网的测试要求是什么?流量生成如何帮助测试汽车以太网? 如今汽车不再是单纯的代步工具,把人从A点带到B点,同时还配备了车载信息娱乐…

深入数仓离线数据同步:问题分析与优化措施

一、前言 在数据仓库领域,离线数仓和实时数仓是常见的两种架构类型。离线数仓一般通过定时任务在特定时间点(通常是凌晨)将业务数据同步到数据仓库中。这种方式适用于对数据实时性要求不高,更侧重于历史数据分析和报告生成的场景…

大语言模型无代码构建知识图谱概述

2023年3月15日,ChatGPT4.0的横空出世,将人们对大语言模型的关注推到了风口浪尖。由于其在智能问答、翻译以及文本生成等工作任务上的卓越表现,业界一度出现了不再需要发展知识图谱相关技术的观点,知识图谱相关概念严重受挫。无可置…

web学习笔记(十六)

目录 HTML5新增标记汇总 1.新增语义化标签 2.新增音频和视频标签 2.1音频标签 audio 2.1视频标签 video 3.新增图像标签 4.新增表单元素和表单控件 5.新增应用程序标签(使用率较低) HTML5新增标记汇总 1.新增语义化标签 新增语义化标签能够便于…

HCIA-H12-811题目解析(12)

1、如图所示, 关于OSPF的拓扑和配置,下列说法中正确的是? 2、如图所示,私有网络中有一台web服务器需要向公网用户提供HTTP服务,因此网络管理员需要在网关路由器RTA上配置NAT以实现需求,则下面配置中能满足…

【OpenCV】OpenCV:计算机视觉的强大工具库

摘要   OpenCV是一个广泛应用于计算机视觉领域的开源工具库,为开发者提供了丰富的图像处理和计算机视觉算法。本文将介绍OpenCV的功能和应用领域,并探讨它在实践中的重要性和前景。 计算机视觉的强大工具库 一、什么是OpenCV?二、OpenCV的功…

qt学习:QT对话框+颜色+文件+字体+输入

目录 概述 继承图 QColorDialog 颜色对话框 QFileDialog 文件对话框 保存文件对话框 QFontDialog 字体对话框 QInputDialog 输入对话框 概述 对于对话框的功能,在GUI图形界面开发过程,使用是非常多,那么Qt也提供了丰富的对话框类QDia…

C++数的输入和输出 2023年12月c++一级 电子学会中小学生软件编程C++等级考试一级真题答案解析

目录 C数的输入和输出 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C数的输入和输出 2023年12月 C编程等级考试一级编程题 一、题目要求 1、编程实现 输入一个整数和双精度浮点数,先将浮…

负载均衡流程

1、负载均衡流程图 2、触发负载均衡函数trigger_load_balance void trigger_load_balance(struct rq *rq) { /* Dont need to rebalance while attached to NULL domain */ if (unlikely(on_null_domain(rq)))//当前调度队列中的调度域是空的则返回 return; i…