如何最小化此功能请教我中的代码MATLAB
Minimize Ra = (0.237 − 0.00175v + 8.693f − 0.00159z)
subjected to 124.53 ≤ v ≤ 167.03
0.025 ≤ f ≤ 0.083
6.2 ≤ z ≤ 14.8
如何最小化此功能请教我中的代码MATLAB
Minimize Ra = (0.237 − 0.00175v + 8.693f − 0.00159z)
subjected to 124.53 ≤ v ≤ 167.03
0.025 ≤ f ≤ 0.083
6.2 ≤ z ≤ 14.8
您正在查看一个(非常退化的)线性程序。
你的未知向量x = [v; f; z]
,目标系数向量是c = [-0.00175; 8.693; -0.00159]
。
在您的特定情况下,您没有等式或不等式约束,只有下限和lb = [124.53; 0.025; 6.2]
上限ub = [167.03; 0.083; 14.8]
。
您正在尝试最小化
argmin c^T x
s.t. lb <= x <= ub
利用linprog
x = linprog( c, [], [], [], [], lb, ub );
请注意,常数系数0.237
不参与优化,因为它对argmin
.
你可以使用fmincon
. 假设v = x(1)
, f = x(2)
, 等z = x(3)
它们都在一个向量中。首先,您将函数的句柄定义为:
h = @(x)(0.237 - − 0.00175*x(1) + 8.693*x(2) − 0.00159*x(3))
您需要在表单中定义您的约束A*x ≤ b
。在您的示例中,我们将约束重写为都小于某个函数:
v ≤ 167.03
-v ≤ -124.53
f ≤ 0.083
-f ≤ -0.025
z ≤ 14.8
-z ≤ -6.2
现在您可以将上述转换为矩阵形式A*x ≤ b
:
A = [1, 0, 0;
-1, 0, 0;
0, 1, 0;
0, -1, 0;
0, 0, 1;
0, 0, -1]
b = [167.03; -124.53; 0.083; -0.025; 14.8; -6.2]
x0
最后,您为您的变量定义一个初始猜测x
,并通过调用fmincon
如下方式进行优化:
xOpt = fmincon(h, x0, A, b)
最初的猜测可以是您的约束范围内的任何值,因此x0 = [167; 0.08; 14]
可以工作。
编辑:您还可以将您的下限和上限向量定义为lb = [124.53; 0.025; 6.2]
andub = [167.03; 0.083; 14.8]
并使用以下命令调用fmincon
:
xOpt = fmincon(h, x0, [], [], [], [], lb, ub)
注意:如果你想随机化你的初始猜测,你可以使用你的lb
和ub
向量来做到这一点x0 = lb + (ub - lb)*rand()
。
这是一个比你解决这个问题所需的更强大的工具,但是,嘿,教一个人钓鱼。
嗯,这很简单:
>> Min_Ra = 0.237 − 0.00175*167.03 + 8.693*0.025 − 0.00159*14.8
ans =
0.1384905
:)
(只需减去最大允许金额,同时添加最小允许金额)