线性规划目标函数用两个求和符号表示,且使用大M法的双目标优化matlab表示并作图
时间: 2023-06-16 22:07:48 浏览: 161
假设线性规划的目标函数为:
$$
\begin{align}
\min\quad & \sum_{i=1}^{n}c_{1,i}x_i + \sum_{i=1}^{n}c_{2,i}y_i \\
\text{s.t.}\quad & \sum_{i=1}^{n}a_{1,i}x_i + \sum_{i=1}^{n}a_{2,i}y_i \geq b \\
& x_i \geq 0,\ y_i \geq 0,\ i=1,2,\ldots,n
\end{align}
$$
其中,$x_i$ 和 $y_i$ 分别表示决策变量的两个分量,$c_{1,i}$、$c_{2,i}$、$a_{1,i}$、$a_{2,i}$ 和 $b$ 均为常数。
使用大M法转化为单目标优化问题后,可以得到如下的标准形式:
$$
\begin{align}
\min\quad & \sum_{i=1}^{n}(c_{1,i}+M\cdot c_{2,i})x_i + \sum_{i=1}^{n}M\cdot y_i \\
\text{s.t.}\quad & \sum_{i=1}^{n}(a_{1,i}+M\cdot a_{2,i})x_i + My_i \geq b \\
& x_i \geq 0,\ y_i \geq 0,\ i=1,2,\ldots,n
\end{align}
$$
接下来,可以使用 MATLAB 中的 `linprog` 函数来求解该线性规划问题。假设使用的 MATLAB 代码为:
```
c1 = [1 2 3 4];
c2 = [5 6 7 8];
a1 = [9 10 11 12];
a2 = [13 14 15 16];
b = 17;
M = 100;
f = [c1+M*c2, M*ones(1, length(c1))];
A = [a1+M*a2, M*ones(1, length(a1))];
b = b;
lb = zeros(1, length(f));
ub = Inf(1, length(f));
[x, fval] = linprog(f, [], [], A, b, lb, ub);
```
其中,`c1`、`c2`、`a1`、`a2` 和 `b` 与上述线性规划问题中的对应变量相同,`M` 表示大M法中的参数。`f` 表示目标函数系数,`A` 表示不等式约束系数矩阵,`b` 表示不等式右侧常数向量,`lb` 和 `ub` 分别表示决策变量的下界和上界。
最后,可以使用 `plot` 函数来绘制目标函数的图像,代码如下:
```
x1 = linspace(0, 10, 100);
x2 = linspace(0, 10, 100);
[X1, X2] = meshgrid(x1, x2);
Z = c1*X1 + c2*X2;
surf(X1, X2, Z);
hold on;
Z = M*X2;
surf(X1, X2, Z);
hold off;
xlabel('x1');
ylabel('x2');
zlabel('f(x1,x2)');
```
其中,`linspace` 函数用于生成指定范围内等间距的向量,`meshgrid` 函数用于生成网格点坐标矩阵,`surf` 函数用于绘制三维图像,`hold on` 和 `hold off` 用于保留和释放图形对象,使得在同一图形窗口中绘制多个图形。最终的图像将显示目标函数的两部分组成,分别对应于 $x$ 和 $y$ 两个决策变量。
阅读全文