yalmip求解鲁棒优化

article/2025/9/25 17:31:11

使用yalmip求解鲁棒优化

  • 前言
  • 鲁棒优化简介
  • yalmip
  • 实操求解
    • 优化问题
    • 示例代码
    • 结果
    • 总结

前言

记录一下早期夭折的研究想法,想使用鲁棒优化(robust optimization,RO)解决整数变量的资源分配问题。目标函数和约束条件都很简单, 但是含有随机变量。由于随机变量的分布未知,在此考虑使用鲁棒优化RO进行资源分配,具有更好地鲁棒性,即对变化具有更好包容性。如果能够得到随机变量的均值和方差,使用鲁棒优化资源分配十分完美。
但是对于随机变量,自己又没有实际的数据,无法得到其均值和方差,也无从进行数据拟合,进行概率分布检验(卡方检验等)。最终的想法也就夭折了。或许夭折的想法也有意义,在此记录,以便对看到的人有启发。

鲁棒优化简介

鲁棒优化是含有不确定参数的优化问题 [1],同随机优化不同。随机优化的不确定参数是具有确定性概率分布的随机变量。而鲁棒优化的不确定性,是指在优化问题中相关不确定参数位于确定的集合范围内,没有确定的概率分布,这里的参数可以是目标函数的系数,也可以是约束条件的系数。鲁棒优化追求即便是在最坏情况下(worst case),其得出的解仍然满足约束条件,不可违背。
鲁棒优化对于数学功底好的同学来说,写论文很顺畅。因为鲁棒优化一般都可以转换为确定性的对等式(Robust counterpart),再使用确定的求解方法求解。

yalmip

yalmip类似python的第三方库,在MATLAB环境下运行,支持多种优化求解器,使得求解优化问题十分简单方便。使用yalmip求解鲁棒优化参考[2],yalmip的使用可以参考[3]。

实操求解

优化问题

在这里插入图片描述
示例优化问题如上图所示,12个整数优化变量,3个不确定参数。在该示例中,假设不确定集合为box类型(即箱型,每个不确定参数都有确定上下界)。以上示例可以很简单的转化为确定性的线性规划问题。

示例代码

%% 2019-7-1 by WDL
% 使用鲁棒优化建模分析
% 定义整数变量 包含优化变量和随机变量
clc;clear all
%step1 变量定义
x = intvar(12, 1);%优化变量 intvar定义整型优化变量12行1列
w = intvar(3, 1);%随机变量
%step2 参数设置 
Ta=150; Tb=150; Tc=150;  
Na=400;Nb=400;Nc=400;
dt=1;%时间间隔%添加约束条件F = [x(1)+x(2)+x(3)+x(4)<=Na,...x(5)+x(6)+x(7)+x(8)<=Nb,...x(9)+x(10)+x(11)+x(12)<=Nc,... %约束条件(1)-(3)x(1)>=w(1)*dt+Ta>=0,...x(5)>=w(2)*dt+Tb>=0,...x(9)>=w(3)*dt+Tc>=0,...%约束条件(4)-(6)x>=50]; %非负约束
%设置不确定集合,此示例为box类型 
% W = [0<=w(1)<=40,0<=w(2)<=40,0<=w(3)<=40,uncertain(w)];W = [-20<=w<=20,uncertain(w)]; %uncertain(w)指明不确定性options = sdpsettings('solver','cplex');   %设置求解器为cplexobjective = sum(x); %目标函数 最小化优化变量累加和sol=optimize(F + W,objective,options) %优化求解Xc=value(x) %解Oc=value(objective)%目标值%% 不考虑鲁棒优化x=intvar(12,1);F1 = [x(1)+x(2)+x(3)+x(4)<=Na,...x(5)+x(6)+x(7)+x(8)<=Nb,...x(9)+x(10)+x(11)+x(12)<=Nc,... %约束条件(1)-(3)x(1)>=w(1)*dt+Ta>=0,...x(5)>=w(2)*dt+Tb>=0,...x(9)>=w(3)*dt+Tc>=0,...%约束条件(4)-(6)x>=50]; %非负约束objective1 = sum(x);options = sdpsettings('solver','cplex');   %设置求解器为cplexsol1=optimize(F1,objective1,options)Xc1=value(x) Oc1=value(objective1)figure %作图
X=[Xc,Xc1]
bar3(X)

结果

(1)鲁棒优化
Oc=960
Xc=[170 50 50 50 170 50 50 50 170 50 50 50]’
(1)确定性优化
Oc1=600
Xc1=[50 50 50 50 50 50 50 50 50 50 50 50]’
在这里插入图片描述

总结

使用yalmip时,最好安装相应的求解器,例如cplex或者gurobi。

参考文献
[1] Gorissen, Bram L., et al. “A Practical Guide to Robust Optimization.” Omega-International Journal of Management Science, vol. 53, 2015, pp. 124–137.
[2]Robust optimization. https://yalmip.github.io/tutorial/robustoptimization/
[3]yalmip + lpsolve + matlab 求解混合整数线性规划问题(MIP/MILP). https://www.cnblogs.com/kane1990/p/3428129.html


http://chatgpt.dhexx.cn/article/jQAn1yrT.shtml

相关文章

【鲁棒优化笔记】基于ROME编程入门鲁棒优化:以一个例子引入(一)

鲁棒优化|基于ROME编程入门鲁棒优化&#xff1a;以一个例子引入&#xff08;上&#xff09; 线性规划中的不确定性一个生产的例子MatlabROME求解 鲁棒优化简单案例&#xff1a;一个投资组合的例子不确定回报率鲁棒优化模型Matlab调用ROME包求解Robust Counterpart 参考文献 鲁棒…

鲁棒优化(3)-yalmip+guobi的小例子

前言 前面我们已经介绍了&#xff0c;连续线性模型的鲁棒对等转换全部过程&#xff0c;本章内容分两部分. 1.将鲁棒优化与机会约束结合&#xff0c;从概率的角度&#xff0c;选取Γ的大小&#xff0c;并给出一个简单易行的公式. 2.结合实例&#xff0c;直观的阐述鲁棒优化的过…

wildfly(JBOSS)启动报错

报错内容&#xff1a; 15:07:50,724 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("add") failed - address: ([("deployment" > "MESwell.ear")]) - failure description: &q…

玩转Eclipse的Wildfly安装、配置到部署

本人也是第一次玩Wildfly,也就是Jboss,有错误的地方希望大家一起指出。(Windows部署)由于Wildfly是依赖与Java的Jdk的,所以在这之前要先安装JDK哦,具体安装步骤我就不多说了,相信大家应该是已经安装好了的。 第一步:到官网下载Wildfly。官方网站:http://www.wildfly.o…

Wildfly部署drools-workbench

首先下载drools-workbench drools官网 目前的最新版本是7.73.0.Final 新版的workbench 已经不支持Tomcat部署了&#xff0c;需要使用wildfly部署&#xff0c;最新的wildfly26.1.1但是测试下来部署workbench会失败&#xff0c;需要下载对应版本的wildfly&#xff0c;如图所示当…

配置Wildfly的JDBC驱动程序

1、环境 windows10、Wildfly26.1.3、JDK8.0、mysql8.0 2、配置方式 配置Wildfly的JDBC驱动一般有两种方式 1️⃣、以module的方式安装&#xff1b; 2️⃣、以应用deploy的程序包方式安装&#xff1b; 以module方式安装&#xff0c;是把驱动置于应用服务器中&#xff1b;以…

在wildfly 21中搭建cluster集群

文章目录 简介下载软件和相关组件配置domain创建应用程序部署应用程序集群配置总结 简介 wildfly是一个非常强大的工具&#xff0c;我们可以轻松的使用wildfly部署应用程序&#xff0c;更为强大的是&#xff0c;wildfly可以很方便的部署cluster应用。 今天我们通过一个例子来…

WildFly配置数据库(mysql)

1.安装wildfly&#xff1a;地址&#xff1a;WildFly Downloads 这里我使用的是WildFly12 2.配置环境 我们可以通过两种方式实现配置&#xff1a; 2.1 我们通过xml方式配置&#xff1a; 第一步&#xff1a;创建目录 在项目文件\wildfly-12.0.0.Final\wildfly12.0.0.Final\mod…

fly.js使用

原文地址&#xff1a;http://www.voidcc.com/project/fly 项目信息 Fly.js 是一个基于 promise 的&#xff0c;轻量且强大的Javascript http 网络库 51 1,686 221 0 2018-09-06 开发语言: JavaScript 开源协议: MIT 项目代码: Github - fly 项目作者: wendux 作者主页: G…

Wildfly 10的安装、配置到部署

第一步&#xff1a;到官网下载Wildfly。 官方网站&#xff1a;http://www.wildfly.org/ 下载地址&#xff1a;http://wildfly.org/downloads/ 我这里下载的是10.1.0.Final这个版本&#xff0c;下载地址是&#xff1a;http://download.jboss.org/wildfly/10.1.0.Final/wildfly…

Wildfly配置Datasources

配置Datasources前&#xff0c;需要先配置对应的JDBC驱动&#xff0c;配置方法&#xff0c;可以参考&#xff1a; Wildfly配置mysql8.0的JDBC驱动 之后&#xff0c;配置对应的Datasources。配置方法有两种&#xff0c;一种是通过管理后台配置&#xff0c;一种是通过手工修改配…

wildfly 21的domain配置

文章目录 简介wildfly模式简介domain controller的配置Host controller的配置文件忽略域范围的资源Server groupsServers总结 简介 wildfly可以使用Standalone模式或者domain模式启动&#xff0c;standalone模式就很简单了&#xff0c;可以看做是一个单独的服务器。今天我们将…

JBoss的AS版本 Wildfly 介绍和使用

WildFly简介&#xff1a; wildFly是一款服务器&#xff0c;和tomcat一样&#xff0c;不过事jboss服务器的as版本罢了&#xff0c;相比于Jboss的EPA版本就比较繁重&#xff0c;所以有了这个Jboss服务器的轻便版本。至于什么时候独立出来的版本&#xff0c;之类的我就不给你扯淡…

FlyBird

游戏演示&#xff1a; 按键盘的上下键来控制小鸟上下移动&#xff0c;碰到管道会大量扣血&#xff0c;但是没有的时候会缓慢回血。 当生命值不是正数的时候&#xff0c;就结束游戏&#xff0c;按下空格可以重新开始。 我的代码如下 我的gitee地址&#xff1a;https://git…

使用wildfly部署项目

WildFly部署项目 一、下载 在浏览器地址栏输入https://www.wildfly.org/&#xff0c;打开WildFly官网,点击other versions选择版本&#xff0c;因为开发环境是jdk1.8&#xff0c;部署环境是Windows&#xff0c;所以这里我选择的是 “Java EE Full & Web Distribution”项…

wildfly安装及基本使用

一.wildfly在linux下的安装 1.下载地址 官网下载地址&#xff1a;https://www.wildfly.org/downloads/ 2.目录介绍 下载好后我们解压出来看一下目录结构&#xff1a; *appclient 里面是一些默认的配置、服务器日志配置等 *bin 里面就是一些可执行的脚本文件&#xff0c;有添…

什么是Wildfly?

WildFly 是一个 Java Enterprise Edition 全功能应用服务器&#xff0c;它提供了运行 Java Web 应用程序所需的所有功能。WildFly 由 Red Hat 设计和维护&#xff0c;正式名称为 JBoss AS。 总体而言&#xff0c;WildFly可以缩短开发时间&#xff0c;更有效地管理资源&#xff…

什么是wildfly

文章目录 什么是wildfly特点下载安装readme及启动命令启动操作总结一下具体步骤&#xff08;第一版&#xff09;1.配置环境变量(下载上面有)3、环境变量配好之后&#xff0c;需要为JBOSSt添加用户&#xff0c;调用dos窗口&#xff0c;输入命令2、启动Jboss&#xff0c;在dos窗口…

python3.6 安装MySQLdb

前言 最近做python的项目需要将json对象存储到数据库&#xff0c;在网上查了一下发现使用mysql数据库和MySQLdb模块是可以做到的。结果上网上查的时候发现&#xff0c;很多人说MySQLdb只能支持python2.4-2.7&#xff0c;不支持python3&#xff0c;但是我的其他部分基于python3…

[数据库] mysql

前言 各种知识多而且容易遗忘,还不容易复习。最好的方法当然是自己给自己提问,不断补缺查漏,缺什么补什么。本文将各类知识归类,并将全文知识点浓缩在自问自查中,并且都写好目录,自问自查时可以随时跳转过去,方便大家系统的学习复习知识。 水平有限,有错误敬请指正 食用方法 …