Ошибка запуска ветки & Bind Solver BNB из обмена файлами Matlab - PullRequest
0 голосов
/ 23 октября 2019

Мой пост похож на 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', но это не помогает, и я сейчас совершенно беспомощен.

Большое спасибо всем, кто читает этот пост и помогаетмне выяснить решение этой проблемы!

...