Matlab-多目标规划问题


多目标规划

一、本质

其本质就是既要xxx,又要xxx,比如我们在买车的时候既想要配置最好,又想要价格最低,那怎么实现这个方案呢,其本质就是一个多目标规划问题,一般来说两个目标是相互冲突的,我们要做的是尽可能在满足条件下达到一个最优状态。

二、举例

在这里插入图片描述
这就是一个多目标规划问题,一共有三个目标。
我们将这三个目标翻译成人话:
1.目标1是不超过,也就是要<=
2.目标2是充分利用,但是不加班,也就是尽量=
3.目标3是利润不低于56万,也就是尽量>=
如果同时满足不了就需要进行取舍
隐藏条件是原材料有限。

1.解题思路

(1)需要衡量每个目标的完成情况。
(2)如果目标之间具有冲突则要先完成重要程度高的。
(3)让其整体的完成情况达到最好。
在这里插入图片描述
正负偏差变量举例:
在这里插入图片描述
目标是让利润不少于56万,也就是利润当然越高越好,因此对于正偏差变量多少无所谓,我们主要让负偏差变量尽可能小,这样即使利润达不到56万,但是差距也小。
由三个目标可以得出公式:
(1) X1-X2<=0 (3)8X1+10X2>=56 分别转化成目标函数:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.绝对约束

就是目标模型中自带的约束,必须满足,否则就是不可行解。
在这里插入图片描述

3.目标约束

也就是对不等式右端的值允许有偏差。
在这里插入图片描述
都是采用多退少补策略。因为你多了利润更好,但是你少了就不太行。补也要补的少。
最终会得到目标函数和约束条件。
在这里插入图片描述
其中p1,p2,p3相当于设定一个优先级。

4.求解

在这里插入图片描述
步骤:
在这里插入图片描述

% 使用优化变量、优化问题来求解
% 创建优化变量x,dp和dm,类似于利用C++的类来创建对象
% 可以用来为目标函数和问题约束创建表达式
x=optimvar('x',2,'LowerBound',0); %定义两个变量x,默认值都为1.LowerBound最小值
dp=optimvar('dp',3,'LowerBound',0);%定义三个正偏差变量dp
dm=optimvar('dm',3,'LowerBound',0);%定义三个负偏差变量dm
p=optimproblem('ObjectiveSense','min');%创建求最小值优化类问题。
%设置约束条件
p.Constraints.const1=[2*x(1)+x(2)<=11];
p.Constraints.const2=[x(1)-x(2)+dm(1)-dp(1)==0 
                     x(1)+2*x(2)+dm(2)-dp(2)==10
                     8*x(1)+10*x(2)+dm(3)-dp(3)==56];
%设置目标函数
obj=[dp(1);dm(2)+dp(2);dm(3)];
% 单级目标函数的最优值goal,初始设为足够大的数
% 非常宽松的约束就等于没有约束,确保第一级的正常运算
goal=100000*ones(3,1)
for i=1:3
    % 重要:更新上一级的最优值,作为该级的约束条件;
    p.Constraints.cons3=[obj<=goal]
    p.Objective=obj(i); %p要求第一个目标的最小值
    [sx,fval]=solve(p);     % 针对优化问题使用solve,会自动选择求解方式。sx最优解 fval最优值
    fprintf('第%d级目标求解为:\n',i)
    fval, xx=sx.x, sdm=sx.dm, sdp=sx.dp
    goal(i)=fval;
end

最终结果:
在这里插入图片描述

### 回答1: 在MATLAB中,constraints函数是用于定义约束条件的函数。它可以用于优化问题中,例如线性规划、非线性规划、整数规划等。通过constraints函数,可以限制变量的取值范围、限制变量之间的关系等,从而使得优化问题的解满足一定的条件。constraints函数的使用方法和语法比较复杂,需要根据具体的问题进行调整。 ### 回答2: MATLAB中的constraints函数用于定义数学模型中的约束条件。在优化问题中,约束条件往往需要被遵守以满足问题的约束性质,例如线性规划问题中的不等式约束条件。在MATLAB中,通过使用constraints函数,可将这些约束条件以一种简洁而优雅的方式添加到数学模型中。 constraints函数的语法构造如下: constraints = struct('lb', lb, 'ub', ub, 'A', A, 'b', b, 'Aeq', Aeq, 'beq', beq); 其中,'lb'和'ub'参数指定了变量的下限和上限,'A'和'b'参数指定了线性不等式约束条件,'Aeq'和'beq'参数指定了线性等式约束条件。以下是对每个参数的详细说明: 1. lb:表示变量的下限,是一个列向量。 2. ub:表示变量的上限,是一个列向量。 3. A:表示线性不等式约束条件的系数矩阵,是一个$(m\times n)$ 的矩阵,其中$m$表示约束条件的个数,$n$是变量的数量。 4. b:表示线性不等式约束条件的稳定向量,是一个列向量,长度为$m$。 5. Aeq:表示线性等式约束条件的系数矩阵,是一个$(p\times n)$ 的矩阵,其中$p$表示等式约束条件的个数。 6. beq:表示线性等式约束条件的稳定向量,是一个列向量,长度为$p$。 constraints函数返回一个包含上述所有参数的结构体对象,可以将其作为输入参数传递给优化函数,例如fmincon,用于指定优化问题中的约束条件。 需要注意的是,constraints函数只支持线性约束条件,如果需要添加非线性约束条件,则需要使用其他的函数或自定义函数进行约束条件的定义和添加。此外,在添加约束条件时,有时需要指定一些额外的参数,例如约束类型、约束松弛系数等,具体需要根据问题的实际情况进行调整。 总之,constraints函数是MATLAB解决优化问题中约束条件定义和处理的重要组成部分,使用它能够有效地提高优化问题求解的质量和精度。 ### 回答3: constraints函数是MATLAB中用于添加约束条件的函数,它是MATLAB中优化算法的基础之一。在MATLAB的优化过程中,约束的存在往往是无法避免的,这时候需要使用constraints函数来实现。 constraints函数可以添加多个约束条件,包括等式约束和不等式约束。等式约束表示在优化过程中需要让某个函数的输出值等于某个给定的值,而不等式约束则表示优化过程中需要将某个函数的输出值限制在某个范围内,例如大于等于某个值、小于等于某个值等。 使用constraints函数需要先定义一个函数作为约束条件,该函数应该返回不等式约束的值或者等式约束与期望值之差。然后将该函数作为constraints函数的参数传入。 例如,使用constraints函数可以实现如下约束条件: 1. x1 + x2 <= 10 (不等式约束) 2. x2 - x1 >= 4 (不等式约束) 3. x1 + x2 == 7 (等式约束) 相应地,我们可以先定义一个函数: function [c,ceq] = mycon(x) c = [x(1) + x(2) - 10; x(2) - x(1) - 4]; ceq = [x(1) + x(2) - 7]; end 然后使用constraints函数添加这些约束条件: x0 = [0;0]; A = []; b = []; Aeq = []; beq = []; lb = [0;0]; ub = [6;6]; nonlcon = @mycon; x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,nonlcon); 其中,@myfun是要进行优化的目标函数,x0是变量的初始值,A,b,Aeq,beq分别表示线性不等式约束和线性等式约束的矩阵和向量,lb,ub分别表示变量的下界和上界,而nonlcon则是我们定义的非线性约束函数@mycon。 可以看出,constraints函数为MATLAB的优化过程增加了更多的灵活性和可操作性,使得优化过程更为全面、精准和高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值