具有一维约束的 fseminf
fseminf with 1 dimensional constraint
我正在尝试在 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);
这是细节,问题是它不能正常工作,我得到了不满足约束的解决方案。它指出:
Local minimum found that satisfies the constraints.↵↵Optimization
completed because the objective function is non-decreasing in
↵feasible directions, to within the value of the optimality tolerance.
我知道约束不满足因为
- 我画了约束区域
- 我的其他算法确实产生了不错的结果
我的问题是问知道 fseminf
函数如何工作的人。该算法是否有可能无法对我的示例进行优化?要补充的是,fseminf
与我的其他示例配合得很好。
编辑
- 算法找到的解是:
(1.1633, 0, 1.0000)
- 而我的其他算法产生:
(0.99069, 0.55395, 0.44605)
几个错误:
f
是x
和s
的函数,不仅x
f = @(x, s) -x(1);
- Semi-infinite约束在整个区间[=43]上进行评估=], 不在
一个固定点
- 将
g(x, s)
中的s(1)
替换为s
不加索引,整个
将使用区间
- Semi-infinite约束
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]
我正在尝试在 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);
这是细节,问题是它不能正常工作,我得到了不满足约束的解决方案。它指出:
Local minimum found that satisfies the constraints.↵↵Optimization completed because the objective function is non-decreasing in ↵feasible directions, to within the value of the optimality tolerance.
我知道约束不满足因为
- 我画了约束区域
- 我的其他算法确实产生了不错的结果
我的问题是问知道 fseminf
函数如何工作的人。该算法是否有可能无法对我的示例进行优化?要补充的是,fseminf
与我的其他示例配合得很好。
编辑
- 算法找到的解是:
(1.1633, 0, 1.0000)
- 而我的其他算法产生:
(0.99069, 0.55395, 0.44605)
几个错误:
f
是x
和s
的函数,不仅x
f = @(x, s) -x(1);
- Semi-infinite约束在整个区间[=43]上进行评估=], 不在 一个固定点
- 将
g(x, s)
中的s(1)
替换为s
不加索引,整个 将使用区间 - Semi-infinite约束
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]