具有1维约束的fseminf

时间:2019-07-03 17:46:50

标签: matlab optimization nonlinear-optimization

我正在尝试在matlab优化环境中使用fseminf函数:

clc;
clear;
close;

% Define function 
global g f S
f= @(x) -x(1);
g= @(x,s) x(1)-x(2).*s(1)-x(3).*(-sqrt((2.25-10.*sqrt(12).*...
(s(1)-1.175).^2)./(5.*sqrt(24)))+1.2);
lb=[-Inf,0,0];
ub=[Inf,1,1];
S=[0.9220144,1.42985]; 
x0= [0.5,0.5,0.5]'; % initial condition
A= [];
b=[];
Aeq= [0,1,1];
beq= [1];
[x,fval,exitflag,output,lambda] = fseminf(f,x0,1,@seminfcon2,A,b,Aeq,beq,lb,ub);

seminfcon2的定义如下:

function [c, ceq, K1, s] = seminfcon2(x,s)
global S g

% No finite nonlinear inequality and equality constraints
c = [];
ceq = [];

% Sample set
if isnan(s(1,1))
      s(1,1)=0.001;
      s(1,2)=0;
end
t = S(1):s(1):S(2);
K1 = g(x,t);

这里是细节,问题是它不能正常工作,我得到的解决方案不符合约束条件。它指出:

  

发现满足约束的局部最小值。↵↵优化   因为目标函数在   directions可行的方向,在最佳公差范围内。

我知道不满足约束条件是因为

  1. 我画了约束区域
  2. 我的其他算法确实产生了很好的结果

我的问题是向知道fseminf函数如何工作的人们提供的。此算法可能无法针对我的示例执行优化吗?要添加的是,fseminf与其他示例很好地配合。


编辑

  • 该算法找到的解决方案是:(1.1633, 0, 1.0000)
  • 我的其他算法产生了:(0.99069, 0.55395, 0.44605)

1 个答案:

答案 0 :(得分:1)

一些错误:

  • fx s的功能,不仅是x
f = @(x, s) -x(1);
  • 半无限约束 是在 整个间隔 而不是在 一个固定点
  • s(1)中的g(x, s)替换为s 无索引 ,整个 将使用间隔
  • 半无限约束 g(x, s)如下
g = @(x,s) x(1)-x(2).*s-x(3).*(-sqrt((2.25-10.*sqrt(12).*...
(s-1.175).^2)./(5.*sqrt(24)))+1.2);

解决方案

x = [0.9907    0.5546    0.4454]