如果变量取决于优化变量,如何编写程序进行优化?

时间:2019-06-20 06:09:47

标签: matlab optimization nonlinear-optimization

在进行优化时,我在Matlab中有一个问题。假设我想对向量x

做一个优化问题

min_x f(x,c)这样的sum(x)=1。对于每个固定的xc是一个常量,例如

(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

是否可以在matlab中使用fmincon解决问题?我想放

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

用于 fmincon 中的非线性约束,但是我想知道它是否有效,因为我们不知道如何根据c明确地编写x

1 个答案:

答案 0 :(得分:2)

  • 使用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