如何最小化此功能请告诉我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
答案 0 :(得分:1)
你正在看(非常堕落)linear program
您的未知向量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
没有影响。
答案 1 :(得分:1)
您可以使用fmincon
。让我们说v = x(1)
,f = x(2)
和z = x(3)
,以便tehy都在一个向量中。首先,您将函数的句柄定义为:
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]
和ub = [167.03; 0.083; 14.8]
,并使用以下方式调用fmincon
:
xOpt = fmincon(h, x0, [], [], [], [], lb, ub)
注意:如果您想将初始猜测随机化,可以使用lb
和ub
向量与x0 = lb + (ub - lb)*rand()
进行对比。
这个工具比你需要的这个问题更强大,但是嘿,教一个人钓鱼。
答案 2 :(得分:0)
嗯,这很简单:
>> Min_Ra = 0.237 − 0.00175*167.03 + 8.693*0.025 − 0.00159*14.8
ans =
0.1384905
:)
(只需减去最大允许金额,同时加上最小允许金额)