如何向Optimization ToolBox中的(优化/目标)函数的参数传递额外的限制条件
How do I pass additional parameters to the constraint and objective functions in the Optimization Toolbox functions?
Subject:
How do I pass additional parameters to the constraint and objective functions in the Optimization Toolbox functions?
Problem Description:
I would like to parameterize my objective function and constraint function in my optimization problem using the Optimization toolbox. Typically this is needed when I want to use parameters and design variables together in an optimization problem.
Solution:
You can pass additional parameters to the nonlinear constraint function as well as objective function using anonymous functions, inline functions, or function files for the objective and constraint functions. An example of this is given below.
Anonymous functions allow you to parameterize your objective and constraint functions.
The objective function "fun" can be defined in a function file:
function f = fun(x,p1)
f = -x(1) * x(2) * x(3)*p1;
(非线性限制条件)
The nonlinear constraint function "nonlcon" is :
function [c, ceq] = nonlcon(x,p1,p2)
(非线性不等式限制条件)
% Define two inequality constraints which use parameters P1 and P2
c(1) = x(1)*p1 + 2*x(2)*x(1)*p2 + 2*x(3) - p2;
c(2) = x(1)*x(2)-100;
(非线性等式限制条件)
% Define the equality constraints
ceq(1) = x(2) -x(1)*x(2);
ceq(2) = x(2) - x(1)*x(3);
The call to FMINCON where the additional parameter P1 is passed to the objective function, and parameters P1 and P2 to the constraint function is:
x0 = [10; 10; 10];
p1 = 1;
p2 = 72;
lb = [0 0 0];
ub = [ 50 50 50];
options = optimset('Largescale','off','Display','iter');
[x, fval] = fmincon(@(x)fun(x,p1), x0, [], [], [], [], lb, ub, @(x)nonlcon(x,p1,p2), options)
For simple objective functions, it is possible to define the objective function in the call to FMINCON, and have no objective function file:
[x, fval] = fmincon(@(x)-x(1)*x(2)*x(3)*p1, x0, [], [], [], [], lb, ub, @(x)nonlcon(x,p1,p2), options)
The ODE functions use the same convention for handling additional parameters as is described here. Additional information about the ODE solvers can be found in the related solution below. MATLAB官网上的出处