Matlab中CVX工具变量相乘优化问题求解咨询
含乘积项的凹目标函数优化问题解决方法
问题背景
需要优化的目标函数为(以一维测试为例):
$$\max_{x,y\geq0} \log\left(1 + \frac{8xy}{4x+2y}\right)$$
N维一般形式为:
$$\max_{x_i,y_i\geq0} \sum_{i=1}^N \log\left(1 + \frac{g_i h_i x_i y_i}{g_i x_i + h_i y_i}\right)$$
直接使用CVX的默认模式或GP模式会触发错误:
- GP模式错误:
Illegal operation: {real constant} + {log-concave},因1 + 对数凹项不符合GP的运算规则; - 默认模式错误:
Invalid quadratic form(s): not a square,因变量乘积导致二次形式不合法。
解决方案:表达式变形适配CVX规则
原目标函数可通过等价变形,转换为CVX可识别的凹函数形式:
将一维目标函数改写为:
$$\max_{x,y\geq0} -\log\left( \frac{4x+2y}{4x+2y+8xy} \right)$$
对于N维情况,对应变形为:
$$\max_{x_i,y_i\geq0} \sum_{i=1}^N -\log\left( \frac{g_i x_i + h_i y_i}{g_i x_i + h_i y_i + g_i h_i x_i y_i} \right)$$
一维测试CVX代码
cvx_begin variable xCVX nonnegative variable yCVX nonnegative expr numerator = 4*xCVX + 2*yCVX; expr denominator = numerator + 8*xCVX*yCVX; maximize( -log(numerator / denominator) ) cvx_end
N维通用CVX代码
cvx_begin variable x(N) nonnegative variable y(N) nonnegative % g、h为对应维度的正常数向量 expr numerator = g.*x + h.*y; expr denominator = numerator + g.*h.*x.*y; maximize( sum( -log(numerator ./ denominator) ) ) cvx_end
原理说明
- 分式项$\frac{g_i x_i + h_i y_i}{g_i x_i + h_i y_i + g_i h_i x_i y_i} = \frac{1}{1 + \frac{g_i h_i x_i y_i}{g_i x_i + h_i y_i}}$,其中$\frac{g_i h_i x_i y_i}{g_i x_i + h_i y_i}$是关于$x_i,y_i$的凹函数;
- 凹函数加正常数仍为凹函数,其倒数(正数范围内)为凸函数;
- $\log(凸函数)$是凸函数,取负号后得到凹函数,符合CVX最大化凹函数的凸优化规则。
内容的提问来源于stack exchange,提问作者V.Ajall
相关产品推荐
相关产品推荐

