【学习笔记】Matlab和python双语言的学习(最大最小化规划)
文章目录
- 前言
- 一、最大最小化规划
- 二、选址问题
- 三、代码实现----Matlab
- 1.Matlab 的 `fminimax` 函数
- 2.Matlab 代码
- 四、代码实现----python
- 总结
前言
通过模型算法,熟练对Matlab和python的应用。
学习视频链接:
https://www.bilibili.com/video/BV1EK41187QF?p=28&vd_source=67471d3a1b4f517b7a7964093e62f7e6
一、最大最小化规划
- 在博弈论中有一个经典理论 ——— 最大最小策略(Minimax strategy),是由博弈论奠基人约翰·冯·诺伊曼(John von Neumann)在1928年提出的一种在理性行为基础上做的保守博弈策略:使得博弈者的最小收入最大化的策略。由此衍生出了最大最小算法(Minimax算法),是一种找出失败的最大可能性中的最小值的算法(即最小化对手的最大得益)。在实际问题中也有许多求最大值的最小化问题,例如急救中心选址问题就是要规划其到所有地点最大距离的最小值,在投资规划中要确定最大风险的最低限度等,为此,对每个,我们先求出目标值 f i ( x ) f_i(x) fi(x) 的最大值,然后再求这些最大值中的最小值。
- 最大最小化问题的一般数学模型:
m i n { m a x [ f 1 ( x ) ] , m a x [ f 2 ( x ) ] , … , m a x [ f m ( x ) ] } s . t . { A x ≤ b A e q ⋅ x = b e q C ( x ) ≤ 0 C e q ( x ) = 0 V L B ≤ X ≤ V U B min\left\{max\Big[f_1\left(x\right)\Big],max\Big[f_2\left(x\right)\Big],\ldots,max\Big[f_m\left(x\right)\Big]\right\}\\s.t.\begin{cases}Ax\leq b\\Aeq\cdot x=beq\\C\left(x\right)\leq0\\Ceq\left(x\right)=0\\VLB\leq X\leq VUB\end{cases} min{max[f1(x)],max[f2(x)],…,max[fm(x)]}s.t.⎩ ⎨ ⎧Ax≤bAeq⋅x=beqC(x)≤0Ceq(x)=0VLB≤X≤VUB
二、选址问题
- 设某城市有某种物品的 10 个需求点,第 i 个需求点 P I P_I PI 的坐标 ( a i , b i ) (a_i,b_i) (ai,bi),道路网与坐标轴平行,彼此正交,现打算建一个该物品的供应中心,且由于受到城市某些条件的限制,该供应中心只能设在 x 界于 [3,8],y 界于 [4,10] 的范围之内,问该中心应建在何处为好?

- 设供应中心的位置为 ( x , y ) (x,y) (x,y),要求它到最远需求点的距离尽可能小,由于道路网与坐标轴平行,彼此正交,故采用沿道路行走计算距离,可知每个需求点 P i P_i Pi, 到该中心的距离为 ∣ x − a i ∣ + ∣ y − b i ∣ |x-a_i|+|y- b_i| ∣x−ai∣+∣y−bi∣,于是模型为: min ( x , y ) { max i [ ∣ x − a i ∣ + ∣ y − b i ∣ ] } s . t . { 3 ≤ x ≤ 8 4 ≤ y ≤ 10 \min_{(x,y)}\left\{\max_i\left[\left|x-a_i\right|+\left|y-b_i\right|\right]\right\}\\s.t.\begin{cases}3\leq x\leq8\\4\leq y\leq10\end{cases} (x,y)min{imax[∣x−ai∣+∣y−bi∣]}s.t.{3≤x≤84≤y≤10
三、代码实现----Matlab
1.Matlab 的 fminimax 函数
fminimax 函数的基本语法如下:
[x, fval] = fminimax(fun, x0, A, b, Aeq, beq, lb, ub, nonlcon)
输入参数基本与非线性规划 fmincon 函数几乎一致,但目标函数需要用函数向量表示。
2.Matlab 代码
%% 最大最小化规划的函数
% [x,fval] = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,noncon,options)
% x0 表示给定的初始值(用行向量或者列向量表示),必须得写
% A b 表示线性不等式约束
% Aeq beq 表示线性等式约束
% lb ub 表示上下界约束
% fun 表示目标函数,需要用函数向量表示
% noncon 表示非线性约束的函数
% options 表示求解非线性规划使用的方法x0 = [5,5]; % 在给定范围内
lb = [3,4];
ub = [8,10];
[x,fval] = fminimax(@fun,x0,[],[],[],[],lb,ub)
function f = fun(x)f = zeros(10,1);a = [1 4 3 5 9 12 6 20 17 8];b = [2 10 8 18 1 4 5 10 8 9];for i = 1:10f(i) = abs(x(1) - a(i)) + abs(x(2) - b(i));end
end
运行结果:

即:中心应建在 (8.0,8.5) 处,最远需求点的距离为 13.5。
四、代码实现----python
在Python中,有几个库可以用于求解类似于MATLAB中 fminimax 的多目标优化问题。fminimax 是用于求解最小化最大目标函数值的问题。在Python中,SciPy 和 CVXPY 等库可以用来进行这种类型的优化。
本文使用 SciPy,SciPy 库中的 minimize 函数可以通过自定义目标函数来实现类似 fminimax 的功能。我们可以定义一个目标函数,该函数返回多个目标函数的最大值,然后使用 minimize 进行优化。
import numpy as np
from scipy.optimize import minimize# 定义要最小化的目标函数:目标是最小化多个目标函数的最大值
def fun(x):f = np.zeros((10,))a = np.array([1, 4, 3, 5, 9, 12, 6, 20, 17, 8])b = np.array([2, 10, 8, 18, 1, 4, 5, 10, 8, 9])for i in range(10):f[i] = abs(x[0] - a[i]) + abs(x[1] - b[i])return np.max(f)# 初始猜测
x0 = np.array([7, 7])bounds = [(3,8),(4,10)]# 使用SLSQP优化器进行优化
result = minimize(fun, x0, bounds=bounds , method='SLSQP')print("Optimal value:", result.fun)
print("Optimal solution:", result.x)
运行结果:

总结
本文介绍了最大最小化规划,并通过选址问题作为示例建立模型,分别使用Matlab和python进行代码编写。
相关文章:
【学习笔记】Matlab和python双语言的学习(最大最小化规划)
文章目录 前言一、最大最小化规划二、选址问题三、代码实现----Matlab1.Matlab 的 fminimax 函数2.Matlab 代码 四、代码实现----python总结 前言 通过模型算法,熟练对Matlab和python的应用。 学习视频链接: https://www.bilibili.com/video/BV1EK41187…...
基于SpringBoot的Redis开发实战教程
配置和集成缓存涉及多个步骤,从选择适当的缓存技术到实现缓存的存取操作。以下是具体的步骤和示例,假设我们使用Redis作为缓存工具,并基于Spring Boot进行开发。 1. 选择和配置缓存技术 a. 选择缓存工具 Redis 是一个流行的内存数据结构存…...
mysql 分区操作
1。新建分区 mysql 没有全局唯一索引,因此所有涉及唯一索引的都需要加上分区键,因此要做好权衡,键分区不一定能提高效率哦,建分区的主要目的是为了分区查询和删除数据 --将CREATE_TIME 加入主键 ALTER TABLE your_table DROP PR…...
[网鼎杯 2018]Comment
使用环境为https://adworld.xctf.org.cn/challenges,搜索题目[网鼎杯 2018]Comment。 进入环境,发现为一个留言板,点击发帖试试。 尝试发帖 跳转到登录页面,根据提示使用burp进行暴力破解。 发现payload为666时状态码不同。 尝试…...
LVS详解
目录 一、LVS简介 LVS 官网: 二、LVS 负载均衡模式 2.1 LVS-NAT模式: 2.1.1 简介 2.1.2 工作流程图: 2.1.3 说明: 2.1.4 LVS-NAT的优缺点: 2.2 LVS-DR模式: 2.2.1 简介 2.2.2 工作原理: 2.2.3 工作…...
Yolo-World初步使用
Yolo v8目前已经支持Yolo-World,整理一下初步使用步骤。 使用步骤 1 先下载Yolo-World的pt文件,下载地址:GitHub - AILab-CVC/YOLO-World: [CVPR 2024] Real-Time Open-Vocabulary Object Detection 官网应该是点这里(有个笑脸…...
Navicat Premium使用
文章目录 Navicat Premium 16的使用连接MySQL建立数据库并构建表导入数据 Navicat Premium 16是一款功能强大的数据库管理工具,它允许用户从单一应用程序中同时连接多种数据库,提供了极其便捷和高效的管理和开发环境,对于 MySQL 用户来说&…...
LLC数字控制TMS320F28034,4-DSP的epwm配置介绍
LLC数字控制TMS320F28034,4-DSP的epwm配置介绍 1 TMS320F280341.1 概述1.2 PWM详细介绍 2 TMS320F28034 PWM功能框图2.1 ePWM功能模块2.2 ePWM功能寄存器框图 3 TMS320F28034 PWM初始化流程4 结合项目设计5 代码设计5.1 PWM初始化程序5.2 工程代码 6 总结 配套代码示…...
MongoDB学习记录
1、初识Mongo 概述:与关系型数据库不同,MongoDB 的数据以类似于 JSON 格式的二进制文档存储,通常称这种格式为Bson,Bson不仅支持JSON中已有的数据类型,还增加了一些额外的数据类型,例如日期和二进制数据&a…...
vlunstack-2(复现红日安全-ATT CK实战)
环境搭建 配置信息 DC IP:10.10.10.10 OS:Windows 2012(64) 应用:AD域 WEB IP1:10.10.10.80 IP2:192.168.47.131 OS:Windows 2008(64) 应用:Weblogic 10.3.6MSSQL 2008 PC IP1:10.10…...
【生信入门】预览快速体验Linux-重生之小明闯Linux
生信少走弯路,快试试生信云专用服务器。新用户注册免费体验5小时。https://www.tebteb.cc 一.故事 小明的Linux冒险 在一片混沌的黑暗中,小明睁开了眼睛。他感到头痛欲裂,四周一片漆黑,只有一行闪烁的字符映入眼帘: [xiaomingu…...
用.net core简易搭建webapi托管到IIS
1、从官网下载.NET Core 托管捆绑包 https://learn.microsoft.com/zh-cn/aspnet/core/tutorials/publish-to-iis?viewaspnetcore-8.0&tabsvisual-studio 2、新建ASP.NET Core WEB API项目 新建控制器TestController并生成GetInfo方法 3、发布 目标路径选择 2)显示所有…...
【计算机网络---OSI七层模型】
一、OSI的基本概念及原则 OSI是Open System Interconnect的缩写,意为开放式系统互联。各个层次的划分遵循以下原则: 1. 同一层的各网络节点都有相同的层次结构,具有同样的功能; 2. 同一节点的内相邻层之间通过接口进行通信&…...
Error updating database. Cause: org.apache.shiro.UnavailableSecurity
mybtisplus查看MetaObjectHandler是否有自定义获取用户信息填充用户的方法...
【网络安全】本地文件包含及远程文件包含漏洞详解
一、文件包含漏洞概述 1.1 什么是文件包含 开发人员将需要重复调用的函数写入一个文件,对该文件进行包含时产生的操作。这样编写代码能减少冗余,降低代码后期维护难度。 保证网站整体风格统一:导航栏、底部footer栏等,把这些不…...
redis启动的三种方式
默认启动: # 默认的启动指令 redis-server 默认启动属于前台启动,会阻塞整个会话窗口,窗口关闭或者按下CTRL C则Redis停止。不推荐使用。 //查看云服务器是否安装过redis redis-server -v//检查安装目录 which redis-server//查看redis进…...
手机怎么远程控制电脑屏幕?手机远程控制电脑方法分享
手机与电脑之间的互联互通变得越来越便捷。 无论是工作还是学习,有时我们需要在手机上远程控制电脑屏幕,以完成一些复杂的操作或查看电脑上的文件。 本文将详细介绍几种实用的手机远程控制电脑屏幕的方法,帮助读者轻松实现这一目标。 一、使…...
NET的全称、主要功能以及在计算机网络中的作用?
.NET是一个广泛的、全方位的平台,应用于开发网站、应用程式、网页应用程式和网络服务。以下是.NET的全称、主要功能以及在计算机网络中的作用: .NET的全称 .NET的全称实际上是Microsoft .NET Framework。它是微软公司推出的一种面向网络的开发框架&…...
LLM - 使用 HuggingFace + Ollama 部署最新大模型 (GGUF 格式 与 Llama 3.1)
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/141028040 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 Ollama…...
如何实现Redis和Mysql中数据双写一致性
在我们的实际开发中,我们用到了redis缓存一些常用的数据(如热点数据)用来提高系统的吞吐量。 但是不可以避免的出现了数据的修改场景,这就导致了数据库中的数据和Redis中出现不一致性的情况。如何保证数据一致性就显得非常重要了&…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
