很久没有写博客了,距离上次写也是两年前了,最近开始在做优化方面的内容,今天想就matlab如何实现区间优化的方法记录一下。
对于优化算法的实现,很大一部分同学采用Lingo软件来进行实现,但是为了论文和作图的需求,采用matlab的方法是不二之选。
首先,让我们先认识一下linprog函数。matlab说明文档是这样介绍的:
改函数用于求解线性规划问题,而我们所用到的方法基本上均是采用转为线性规划问题来求解的,也就是说该函数可以用于大部分的优化求解,你仅需将其转为linprog函数所要求的格式即可。
接下来,我们再来看下该函数的参数说明:
在说明文档中各个重载函数的例子,不再赘述!
需要强调的一点,linprog函数用于求 min,那如果是max怎么办呢?很简单,仅需将min中的常数项均 取反 即可。
接下来我们用两步区间优化来说明此问题。首先,先简单介绍一下区间优化的基本方法,下图为区间优化的公式定义:
model:
目标:
约束:
xj>=0, j=1,2,k1,…n ,cj 上下限与f相同,而bi则:
aij 的上下限与 x 上下限相反:
具体到是 min 或 max 则为 max 先求上限,而 min 先求下限
对于 min ;
submodel 1:
其中
是 submodel1 求出的优化结果.
对于 max ;
submodel 1:
submodel 2:
以上就是matlab中实现区间优化的前提,接下来我们用案例来实现区间优化,这里我们仅通过
linprog(f,a,b)来说明,其它类似。
首先,我们需要将此模型拆分为两步模型
submodel 1:
submodel 2:
submodel 1 转换:
submodel 2转换:
我们仅需要两次调用linprog()函数即可,具体代码实现如下:
矩阵创建
函数实现submodel1
同理实现submodel2.