如果变量依赖于优化变量,如何编写优化程序?
How to code a program for optimization if a variable depends on optimization variables?
我在做优化的时候在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
。
能否在matlab中使用fmincon解决问题?我想放
(x.*a+c).^(1./alpha)+(x.*b+c).^(1./alpha)=1
对于 fmincon 中的非线性约束,但我想知道它是否有效,因为我们不知道如何根据 [=13] 显式地写出 c
=].
- 使用
solve
根据x
显式地写c
- 将
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
我在做优化的时候在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
。
能否在matlab中使用fmincon解决问题?我想放
(x.*a+c).^(1./alpha)+(x.*b+c).^(1./alpha)=1
对于 fmincon 中的非线性约束,但我想知道它是否有效,因为我们不知道如何根据 [=13] 显式地写出 c
=].
- 使用
solve
根据x
显式地写 - 将
f(x,c)
定义为仅x
的函数 c
替换为它的表达式- 开始优化
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