2

如何最小化此功能请教我中的代码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
4

3 回答 3

1

您正在查看一个(非常退化的)线性程序
你的未知向量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.

于 2013-06-12T11:49:40.350 回答
1

你可以使用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)

注意:如果你想随机化你的初始猜测,你可以使用你的lbub向量来做到这一点x0 = lb + (ub - lb)*rand()

这是一个比你解决这个问题所需的更强大的工具,但是,嘿,教一个人钓鱼。

于 2013-06-12T14:10:16.483 回答
0

嗯,这很简单:

>> Min_Ra = 0.237 − 0.00175*167.03 + 8.693*0.025 − 0.00159*14.8

ans = 
    0.1384905

:)

(只需减去最大允许金额,同时添加最小允许金额)

于 2013-06-12T11:55:14.693 回答