是否可以将优化中计算出的值控制为有限值?

时间:2019-07-11 06:28:51

标签: matlab optimization mathematical-optimization

我有一个function.m,因此function(x,y)是一个连续的函数,定义明确。对于y范围内的每个0.04:0.02:0.2,我想找到x使得function(x,y)给出值0.5。不幸的是,function(x,y)没有为任何x定义。例如,当y=0.04时,function(x,y)=0.4x=2function(x,y)=0.55x=3。当function(x,y)=-inf时,也会给出x<2。另一方面,当y=0.05时,function(x,y)=0.4x=5function(x,y)=0.81x=9function(x,y)=-infx<5。我想在Matlab中使用fmincon来解决问题,所以我写了一个循环让我找到x

  

y = 0.04:0.02:0.2;

     

对于i = 1:长度(y)

     

result = fmincon(@(x)abs(function(x,y(i))-0.5),2,[],[],[],[],[],[]);

     

结束

但是,在进行优化时,例如,当y=0.04x的值被选择为小于2且给出-inf值并且无法继续使用时,会发生这种情况。我想知道是否可以设置matlab仅查找有限值,或者当它尝试给出目标-inf的点时,它可以自动找到另一个x值并继续执行该过程。

我了解我可以找到一个特定的范围,该范围首先为每个0.5赋值y,但这非常耗时,我不想这样做。

1 个答案:

答案 0 :(得分:0)

假设

f = @(x, y)-y.*exp(x);
  • f的最小值为-inf
  • 目标:找到x的值最小但f的{​​{1}}
  • 约束
-inf
  • -inf < f < inf --> f - inf < 0 and -f - inf < 0 在Matlab上的值近似值
inf

同时

>> exp(709) = 8.2184e+307 

我选择>> exp(710) = inf inf

现在我有一个非线性约束

exp(709)

将其添加到f - exp(710) < 0 and -f - exp(710) < 0 fmincon()不会取无穷大的价值

请仔细阅读评论

f

输出:

% Given y
y = 0.04:0.02:0.2;

% Given function f
f = @(x, y)-y.*exp(x);



% store fmincon solution x
x = zeros(size(y));

% store fminconfunction evaluation x
fval =zeros(size(y));
for i = 1:length(y)

    % function depending on x only
    g =@(x)f(x, y(i));

    % initial function evaluation constrained not to take infinite values
    c =  @(x)[g(x)-exp(709); -g(x)-exp(709)]; 
    ceq = @(x)[];
    constraints = @(k)deal(c(k),ceq(k));

    [x(i), fval(i)] = fmincon(g,2,[],[],[],[],[],[],constraints);
end