半无限问题有关函数介绍

用fseminf函数求半无限约束多变量非线性函数的最小值,初值给定。目标是使f(x)最小化。因为不可能计算所有的可能值,所以必须选择一个区域,在它上面计算样本数据集。

fseminf函数的调用格式为:

x = fseminf(fun, x0, ntheta, seminfcon) 初值为x0,ntheta表示半无限约束的个数,半无限约束为seminfcon的fun函数的最小值。

x = fseminf(fun, x0, ntheta, seminfcon, A, b) 该函数试图满足线性不等式A*x <= b。

x = fseminf(fun, x0, ntheta, seminfcon, A, b, Aeq, beq) 在上面的基础上添加线性等式Aeq*x = beq。当没有不等式存在时,设置A=[ ]、b=[ ]。

x = fseminf(fun, x0, ntheta, seminfcon, A, b, Aeq, beq, lb, ub) 定义设计变量x的一系列下界lb和上界ub, 使得总有lb <= x <= ub。

x = fseminf(fun, x0, ntheta, seminfcon, A, b, Aeq, beq, lb, ub, options) 用options结构指定的优化参数进行最小化。

[x, fval] = fseminf(...) 返回解x处的目标函数值。

[x, fval, exitflag, output] = fseminf(...) 返回描述退出条件的exitflag参数和包含优化信息的输出参数output。

[x, fval, exitflag, output, lambda] = fseminf(...) 返回包含解x处拉格朗日乘子的lambda参数。

各调用格式中,ntheta参数为半无限约束的个数。options参数为优化参数选项,为一结构,有以下一些字段:

CheckGradients ——比较用户提供的导数(梯度)和有限差分导数。

Diagnostics ——显示待最小化或待求解函数的诊断信息。

DiffMaxChange ——变量有限差分的最大变化。

DiffMinChange ——变量有限差分的最小变化。

Display ——显示水平。设置为 'off' 时不显示输出;设置为 'iter' 时显示每一步迭代过程的输出;设置为 'final' 时显示最终的迭代结果。

MaxFunctionEvaluations ——函数评价的最大次数。

MaxIterations ——函数迭代的允许最大次数。

ConstraintTolerance ——约束超出值的终止容限。

FunctionTolerance ——函数值的终止容限。

StepTolerance ——解x处的终止容限。

seminfcon参数计算非线性不等式矢量c,非线性等式矢量ceq和ntheta,半无限约束(矢量或矩阵)K1, K2,..., Kntheta。seminfcon参数是一个包含函数名的字符串,该函数可以是M文件、内部文件或MEX文件。例如,若seminfcon='myinfcon',则M文件myinfcon.m有下面的形式:

code.matlab
function [c,ceq,K1,K2,...,Kntheta,S] = myinfcon(x,S)
% 初始化样本区间
if isnan(S(1,1)),
   S = ...  		% S有ntheta行、2列
end
w1 = ...    		% 计算样本集
w2 = ...    		% 计算样本集
...
wntheta = ... 	% 计算样本集
K1 = ...    		% x和w处的一阶半无限约束
K2 = ...    		% x和w处的二阶半无限约束
...
Kntheta = ... 	% x和w处的最后一阶半无限约束
c = ...      	% 计算x处的非线性不等式
ceq = ...    	% 计算x处的非线性等式

S为建议的样本区间,可以用它也可以不用它。如果没有此约束存在,将为c和ceq返回空矩阵。

矢量或矩阵K1, K2, ..., Kntheta包含分别为样本集中的独立变量w1, w2, ... wntheta进行评价的半无限约束。两个列矩阵S包含w1, w2, ... wntheta值的建议的样本区间,它们用于评价K1, K2, ... , Kntheta。S矩阵的第i行包含评价Ki的样本区间。当Ki为一矢量时,只用S(i, j)(第2列可以都为零)。当Ki为一矩阵时,S(i, 2)用于对Ki中的行进行取样,S(i,1)被用作Ki中列的取样区间。第一次迭代,S为空值,所以有些初始取样区间必须由seminfcon参数来决定。