利用fmincon在MATLAB中实现非线性约束下的最大化
我试图解决最大化函数s.t.14约束和15个变量。 有些是线性的,有些不是。它们都是等式(没有不等式) 我尝试过使用“fsolve”和“solve”,使用拉格朗日(最终得到29个方程和30个变量)-但效果不太好 我转到了fmincon。我在一个名为objectfun.m的文件中设置了一个带有目标函数的脚本:利用fmincon在MATLAB中实现非线性约束下的最大化,matlab,math,constraints,solver,nonlinear-optimization,Matlab,Math,Constraints,Solver,Nonlinear Optimization,我试图解决最大化函数s.t.14约束和15个变量。 有些是线性的,有些不是。它们都是等式(没有不等式) 我尝试过使用“fsolve”和“solve”,使用拉格朗日(最终得到29个方程和30个变量)-但效果不太好 我转到了fmincon。我在一个名为objectfun.m的文件中设置了一个带有目标函数的脚本: function f = objectfun(x,I,rho) % SWAPPING VARIABLE NAMES FOR READABILITY: w = x(1); t = x(2);
function f = objectfun(x,I,rho)
% SWAPPING VARIABLE NAMES FOR READABILITY:
w = x(1);
t = x(2);
beta = x(3);
r = x(4);
% VALUE FUNCTION TO BE MINIMIZES:
f = -(rho*w*(1-t)+beta+I*(1+(1-t)*r));
我设置了另一个约束条件:
function [c, ceq] = confun(x,...
Bs,Bu,sigma_s,sigma_u,rho,c_bar,I,A,alpha)
% SWAPPING VARIABLE NAMES FOR READABILITY:
w = x(1);
t = x(2);
beta = x(3);
r = x(4);
vum = x(5);
vsm = x(6);
ms = x(7);
cstar = x(8);
zs = x(9);
zu = x(10);
H = x(11);
K = x(12);
Y = x(13);
L = x(14);
mu = x(15);
% INEQUILITY CONSTRAINTS:
c = [];
% EQUALITY CONSTRAINTS:
ceq = [ms-Bs*vsm^sigma_s; % 1
mu-Bu*vum^sigma_u; % 2
(1+r*(1-t))*cstar-(1-rho)*w*(1-t); % 3
zs-cstar/c_bar; % 4
zu-1+zs; % 5
H-(cstar^2)/(2*c_bar); % 6
I-K-H; % 7
A*(K^alpha)*(L^(1-alpha))-Y; % 8
L-(zs+rho*zu+ms+rho*mu); % 9
w-(1-alpha)*A*(K/L)^alpha; % 10
r-alpha*A*(K/L)^(alpha-1); % 11
t*Y-beta*(1+ms+mu); % 12
vum-rho*w*(1-t)-beta; % 13
vsm-w*(1-t)-beta]; % 14
还有一个主要剧本:
%% Parameters:
Bs =0.0;
Bu =0.0;
sigma_s = 1.5;
sigma_u = 1.5;
rho = 0.33;
c_bar = 6;
I = 3;
A = 1;
alpha = 0.33;
%% Numeric Solution:
x0 = 0.5*ones(length(var_names),1);
objective = @(x)objectfun(x,I,rho);
constraints = @(x)confun(x,...
Bs,Bu,sigma_s,sigma_u,rho,c_bar,I,A,alpha);
options = optimoptions(@fmincon);
[s,fval] = fmincon(objective,x0,[],[],[],[],[],[],constraints,options);
问题是:
解决办法是胡说八道。我把这些方程式看了很多遍——让我们假设它们是好的!(请……[=)
提前感谢!!!以下是您可以做的一些事情:
非常感谢!边界-我在约束函数中加入了不等式约束(特别是在“c”中)?我一定会尝试Gams,谢谢你的建议。不。使用lb,ub。fmincon上的帮助页面提供了有关如何使用它的帮助。