Мой пост похож на MATLAB: bnb20 (метод ветвей и границ) Оптимизация в том смысле, что речь идет о том, чтобы заставить алгоритм оптимизации ветвей и границ "bnb", загруженный на обмен файлами Matlab, работать.
У меня есть следующий код:
x0=1; % Initialize x0, Column Vector
xstat=1; % BNB variable types: Continuous for xstatus(i)=0 // Integer for xstatus(i)= 1 // Fixed for xstatus(i)=2
A = []; % this problem has no inequality constraints
b = []; % this problem has no inequality constraints
Aeq = []; % this problem has no equality constraints
beq = []; % this problem has no equality constraints
lb = 0; % Given Bounds in problem statement
ub = 31; % Given Bounds in problem statement
setts=[];
options = optimset('Display','iter','TolX',1e-2,'maxSQPiter',Inf);
%% Run the BNB Code
[errmsg,Z,X,t,c,fail] = BNB20('fun',x0,xstat,lb,ub,A,b,Aeq,beq,'nonlcon',setts,options);
% where Z ist the function value, X is the variable value, t is the time elapsed while the algorithm BNB has run and c is the number of BNB cycles.
Более того, две мои функции 'fun' и 'nonlcon' определены в отдельных файлах следующим образом:
function f=fun(x.varargin)
A=2;
B=3;
f=A*x+B*x;
end
И:
function [C,Ceq] = nonlcon(x,varargin)
C = -x^2*2-10; % Compute nonlinear inequalities at x.
Ceq = -10+x^2; % Compute nonlinear equalities at x.
end
И я получаю сообщение об ошибке «ошибка, вызванная неконтролем». Хотя я знаю, что это связано с номерами строк 166 и 167 в файле bnb20.m
if ~isempty(nonlcon)
eval(['[C, Ceq]=',nonlcon,'(x0,varargin{:});'],'errmsg=''nonlcon caused error.''; evalreturn=1;');
Я не могу найти способ ее решить. Я попытался добавить varargin в объявление функции для 'fun' и 'nonlcon', но это не помогает, и я сейчас совершенно беспомощен.
Большое спасибо всем, кто читает этот пост и помогаетмне выяснить решение этой проблемы!