【发布时间】:2017-11-17 17:35:09
【问题描述】:
我正在使用 fmincon 优化来查找适合约束的参数。目前设置如下:
constraints = [1 2 3];
interval = 100;
time_start = [2500];
time_boundary = [500 5000];
param2_start = [0.5];
param2_boundary = [0 1];
opts = optimset(optimset('fmincon'),'TolFun',1e-4,'TolX',1e-4,'display','iter');
[x,fval] = fmincon(@(X) func(X,constraints,interval),[time_start param2_start],[],[],[],[],[time_boundary(1) param2_boundary(1)],[time_boundary(2) param2_boundary(2)],[],opts)
简化的func 是:
function out = func(X,constraints,interval)
time = X(1);
param2 = X(2);
% Check inputs before calculations
if (mod(time,interval) > 0)
out = 999;
else
% Perform calculations based on parameters, constraints and interval.
% Simplified to:
out = time/interval;
end
end
但是,如果 time 不能被 interval 整除,则函数 (func) 可能会失败。
有没有办法在函数中捕捉到这一点,以便fmincon 转移到另一个解决方案而不会失败?
或者,有没有更好的方法来使用fmincon(或其他优化工具)来避免这个问题?
【问题讨论】:
-
什么是
time?你能加一个minimal reproducible example吗?你说的可分是什么意思?整除?所有实数都可以相互整除。 -
抱歉。我试图简化一个最小的例子,但它太简单了。是的,我的意思是整数整除。我已经修改了问题描述。
-
@user3743235 你的例子仍然没有运行......
-
不,你需要一个 MINLP 求解器。
-
@houtanb 再次修改。这现在至少应该可以工作,即使它是使用这种优化的一个糟糕的例子。
标签: matlab function optimization