Matlab如何实现区间优化

Posted 流浪若相惜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matlab如何实现区间优化相关的知识,希望对你有一定的参考价值。

很久没有写博客了,距离上次写也是两年前了,最近开始在做优化方面的内容,今天想就matlab如何实现区间优化的方法记录一下。
对于优化算法的实现,很大一部分同学采用Lingo软件来进行实现,但是为了论文和作图的需求,采用matlab的方法是不二之选。

1.认识优化函数linprog

首先,让我们先认识一下linprog函数。matlab说明文档是这样介绍的:
改函数用于求解线性规划问题,而我们所用到的方法基本上均是采用转为线性规划问题来求解的,也就是说该函数可以用于大部分的优化求解,你仅需将其转为linprog函数所要求的格式即可。
接下来,我们再来看下该函数的参数说明:
在说明文档中各个重载函数的例子,不再赘述!
需要强调的一点,linprog函数用于求 min,那如果是max怎么办呢?很简单,仅需将min中的常数项均 取反 即可。

2 区间优化

2.1介绍

接下来我们用两步区间优化来说明此问题。首先,先简单介绍一下区间优化的基本方法,下图为区间优化的公式定义:

2.2 两步求解方法

model:
目标:
约束:


xj>=0, j=1,2,k1,…ncj 上下限与f相同,而bi则:

aij 的上下限与 x 上下限相反:


具体到是 minmax 则为 max 先求上限,而 min 先求下限

2.3 minmax具体求解方法

对于 min
submodel 1:

其中
submodel1 求出的优化结果.
对于 max ;
submodel 1:

submodel 2:

3 案例

以上就是matlab中实现区间优化的前提,接下来我们用案例来实现区间优化,这里我们仅通过
linprog(f,a,b)来说明,其它类似。

3.1 将模型转为二步模型


首先,我们需要将此模型拆分为两步模型
submodel 1:

submodel 2:

3.2 将模型 max 转换为 min

submodel 1 转换:

submodel 2转换:

3.3 求解

我们仅需要两次调用linprog()函数即可,具体代码实现如下:
矩阵创建

函数实现submodel1

function m= IntervalImplement(c1,a1,b1)
object1=linprog(c1,a1,b1);
y1=object1(1);
y2=object1(2);
%x1=cell(2,2);
fprintf('优化目标上限=%8.4f\\n',y1);
fprintf('优化目标下限=%8.4f\\n',y2);
end

同理实现submodel2.

以上是关于Matlab如何实现区间优化的主要内容,如果未能解决你的问题,请参考以下文章

SQLite 优化:同时搜索下限和上限

Matlab如何实现区间优化

线性规划求解器中上限和下限的参数

令人头疼的优化问题——多目标规划问题matlab求解

使用 numpy.random.normal 时如何指定上限和下限

我如何向 Google ortools 添加一组值而不是下限和上限?