求解涉及多目标的目标达到问题

您所在的位置:网站首页 matlab里求导 求解涉及多目标的目标达到问题

求解涉及多目标的目标达到问题

2023-06-14 07:09| 来源: 网络整理| 查看: 265

目标函数,指定为函数句柄或函数名称。fun 函数接受向量 x 并返回向量 F,即在 x 处计算的目标函数值。对于函数文件,您可以将函数 fun 指定为函数句柄:

x = fgoalattain(@myfun,x0,goal,weight)

其中 myfun 是一个 MATLAB® 函数,例如

function F = myfun(x) F = ... % Compute function values at x.

fun 也可以是匿名函数的函数句柄:

x = fgoalattain(@(x)sin(x.*x),x0,goal,weight);

fgoalattain 以 x0 参数的形状将 x 传递给目标函数和任何非线性约束函数。例如,如果 x0 是 5×3 数组,则 fgoalattain 将 x 以 5×3 数组的形式传递给 fun。但是,在将 x 转换为列向量 x(:) 后,fgoalattain 会将线性约束矩阵 A 或 Aeq 乘以 x。

要使目标函数尽可能接近目标值(即不大于也不小于),请使用 optimoptions 将 EqualityGoalCount 选项设置为值应处在目标值邻域中的目标的数目。这些目标必须划分为 fun 返回的向量 F 的前几个元素。

假设目标函数的梯度也可以计算并且 SpecifyObjectiveGradient 选项是 true,设置如下:

options = optimoptions('fgoalattain','SpecifyObjectiveGradient',true)

在这种情况下,函数 fun 必须在第二个输出参数中返回在 x 处的梯度值 G(矩阵)。梯度由每个 F 在 x 点处的偏导数 dF/dx 组成。如果 F 是长度为 m 的向量,且 x 的长度为 n,其中 n 是 x0 的长度,则 F(x) 的梯度 G 是 n×m 矩阵,其中 G(i,j) 是 F(j) 关于 x(i) 的偏导数(即,G 的第 j 列是第 j 个目标函数 F(j) 的梯度)。

注意

仅当问题没有非线性约束,或问题有非线性约束且 SpecifyConstraintGradient 设置为 true 时,将 SpecifyObjectiveGradient 设置为 true 才会高效。在算法内部,目标被折叠到约束中,因此要为求解器提供两种梯度(目标和约束),以避免估计梯度。

数据类型: char | string | function_handle



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3