Как написать программу для оптимизации, если переменная зависит от переменных оптимизации? - PullRequest
0 голосов
/ 20 июня 2019

У меня есть вопрос в Matlab при выполнении оптимизации.Предположим, я хочу выполнить задачу оптимизации для вектора x

min_x f(x,c), такого, что sum(x)=1.Для каждого фиксированного x, c является константой, например,

(x.*a+c).^(1./alpha)+(x.*b+c).^(1./alpha)=1

, где известны a,b,alpha.

Алгоритм для каждого фиксированного x такой, что sum(x)=1, нам нужно найти c из

(x.*a+c).^(1./alpha)+(x.*b+c).^(1./alpha)=1 

и вычислить f(x,c), затем мы обновим новый x.

Можно ли использовать fmincon в matlab для решения проблемы?Я хочу поставить

(x.*a+c).^(1./alpha)+(x.*b+c).^(1./alpha)=1 

для нелинейного ограничения в fmincon , но мне интересно, допустимо ли оно, так как мы не знаем, как написать c явно в терминах x.

1 Ответ

2 голосов
/ 20 июня 2019
  • Используйте solve для явной записи c в терминах x
  • Определите f(x,c) как функцию только x
  • cзаменяется на выражение
  • Запустить оптимизацию

Пожалуйста, прочитайте комментарии

% Given a, b, alpha
a = 2; b = 5; alpha = 1;

% Unknown x, c
syms x c

% Relation between x and c
eq = (x.*a+c).^(1./alpha)+(x.*b+c).^(1./alpha)== 1 ;

% Mention only c, x will be considered as independent variable
% The solution gives c in terms of x
c = solve(eq, c);

% Transfom syms variable into function handle variable 
c = matlabFunction(c);
% c(x) = x.*(-7.0./2.0)+1.0./2.0


% Define f as a function of x only, c is a constant having x as parameter
 fun =@(x)f(x, c(x));

% optimization starts here 

 [x, fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options);


% Given function in terms of x and c
function y = f(x,c)
    y = 2.*x + c;
end

...