线性规划求解器 matlab,基于求解器设置线性规划

求解方法

要求解优化问题,请执行以下步骤。选择求解器

要找到求解此问题的合适求解器,请参考优化决策表。该表要求您根据目标函数的类型和约束的类型对问题进行分类。对于此问题,目标函数是线性的,约束也是线性的。决策表推荐使用 linprog 求解器。minxfTxsuch that{A⋅x≤b,Aeq⋅x=beq,lb≤x≤ub.(1)

fTx 表示由常量组成的行向量 f 乘以由变量组成的列向量 x。换言之,

fTx = f(1)x(1) + f(2)x(2) + ... + f(n)x(n),

其中,n 是 f 的长度。

A x ≤

b 表示线性不等式。A 是 k×n 矩阵,其中 k 是不等式的数目,n 是变量的数目(大小为 x)。b 是长度为 k 的向量。有关详细信息,请参阅线性不等式约束。

Aeq x =

beq 表示线性等式。Aeq 是一个 m×n 矩阵,其中 m 是等式的个数,n 是变量的个数(大小为 x)。beq 是长度为 m 的向量。有关详细信息,请参阅线性等式约束。

lb ≤ x ≤

ub 表示向量 x 中的每个元素必须大于 lb 的对应元素,并且必须小于 ub 的对应元素。有关详细信息,请参阅边界约束。

如函数参考页所示,linprog 求解器的语法是

[x fval] = linprog(f,A,b,Aeq,beq,lb,ub);

linprog 求解器的输入是公式 1 中的矩阵和向量。将变量合并成一个向量

模型说明的方程中有 16 个变量。将这些变量放入一个向量中。由变量组成的向量的名称在公式 1 中是 x。决定阶次,并基于变量构造 x 的分量。

以下代码使用变量名称组成的元胞数组来构造向量。

variables = {'I1','I2','HE1','HE2','LE1','LE2','C','BF1',...

'BF2','HPS','MPS','LPS','P1','P2','PP','EP'};

N = length(variables);

% create variables for indexing

for v = 1:N

eval([variables{v},' = ', num2str(v),';']);

end

执行这些命令会在工作区中创建以下命名变量:

e263ddc7a21c17c33b4894dea3ace2fd.png

这些命名变量表示 x 分量的索引编号。您不必创建命名变量。视频优化建模,第 2 部分:转换为求解器形式显示如何使用 x 分量的索引编号来轻松求解问题。编写边界约束

在模型说明的方程中有四个变量包含下界,六个变量包含上界。下界:

P1 ≥ 2500

P2 ≥ 3000

MPS ≥ 271,536

LPS ≥ 100,623。

此外,所有变量均为正,这意味着其下界为零。

创建由 0 组成的下界向量 lb,然后添加其他四个下界。

lb = zeros(size(variables));

lb([P1,P2,MPS,LPS]) = ...

[2500,3000,271536,100623];

具有上界的变量有:

P1 ≤ 6250

P2 ≤ 9000

I1 ≤ 192,000

I2 ≤ 244,000

C ≤ 62,000

LE2 ≤ 142000。

创建由 Inf 组成的上界向量,然后添加六个上界。

ub = Inf(size(variables));

ub([P1,P2,I1,I2,C,LE2]) = ...

[6250,9000,192000,244000,62000,142000];编写线性不等式约束

模型说明的方程中有三个线性不等式:

I1 - HE1 ≤ 132,000

EP + PP ≥ 12,000

P1 + P2 +

PP ≥ 24,550。

为了使方程具有 A x≤b 形式,需要将所有变量放在不等式的左侧。所有这些方程均已采用该形式。在适当情况下,通过乘以 –1,确保每个不等式均为“小于”形式:

I1 - HE1 ≤ 132,000

-EP - PP ≤ -12,000

-P1 - P2 -

PP ≤ -24,550。

在您的 MATLAB® 工作区中,将 A 矩阵创建为 3×16 零矩阵,对应于采用 16 个变量的 3 个线性不等式。创建具有三个分量的 b 向量。

A = zeros(3,16);

A(1,I1) = 1; A(1,HE1) = -1; b(1) = 132000;

A(2,EP) = -1; A(2,PP) = -1; b(2) = -12000;

A(3,[P1,P2,PP]) = [-1,-1,-1];

b(3) = -24550;编写线性等式约束

模型说明的方程中有八个线性方程:

I2 = LE2 + HE2

LPS =

LE1 + LE2 + BF2

HPS = I1 + I2 +

BF1

HPS = C + MPS +

LPS

I1 = LE1 + HE1 +

C

MPS = HE1 + HE2 + BF1 -

BF2

1359.8 I1 = 1267.8 HE1 + 1251.4

LE1 + 192 C + 3413 P1

1359.8 I2 =

1267.8 HE2 + 1251.4 LE2 + 3413 P2。

为了使方程具有 Aeq x=beq 形式,需要将所有变量放在方程的一侧。方程变为:

LE2 + HE2 - I2 = 0

LE1

+ LE2 + BF2 - LPS = 0

I1 + I2 + BF1

- HPS = 0

C + MPS + LPS - HPS =

0

LE1 + HE1 + C - I1 =

0

HE1 + HE2 + BF1 - BF2 - MPS =

0

1267.8 HE1 + 1251.4 LE1 + 192 C +

3413 P1 - 1359.8 I1 = 0

1267.8 HE2 +

1251.4 LE2 + 3413 P2 - 1359.8 I2 = 0。

现在编写对应于这些方程的 Aeq 矩阵和 beq 向量。在您的 MATLAB 工作区中,将 Aeq 矩阵创建为 8×16 零矩阵,对应于包含 16 个变量的 8 个线性方程。创建具有八个分量且值均为零的 beq 向量。

Aeq = zeros(8,16); beq = zeros(8,1);

Aeq(1,[LE2,HE2,I2]) = [1,1,-1];

Aeq(2,[LE1,LE2,BF2,LPS]) = [1,1,1,-1];

Aeq(3,[I1,I2,BF1,HPS]) = [1,1,1,-1];

Aeq(4,[C,MPS,LPS,HPS]) = [1,1,1,-1];

Aeq(5,[LE1,HE1,C,I1]) = [1,1,1,-1];

Aeq(6,[HE1,HE2,BF1,BF2,MPS]) = [1,1,1,-1,-1];

Aeq(7,[HE1,LE1,C,P1,I1]) = [1267.8,1251.4,192,3413,-1359.8];

Aeq(8,[HE2,LE2,P2,I2]) = [1267.8,1251.4,3413,-1359.8];编写目标

目标函数是

fTx = 0.002614 HPS + 0.0239 PP + 0.009825 EP。

将此表达式写成由 x 向量的乘数组成的向量 f:

f = zeros(size(variables));

f([HPS PP EP]) = [0.002614 0.0239 0.009825];使用 linprog 求解问题

您现在已经有 linprog 求解器所需的输入。调用该求解器并以设定的格式打印输出:

options = optimoptions('linprog','Algorithm','dual-simplex');

[x fval] = linprog(f,A,b,Aeq,beq,lb,ub,options);

for d = 1:N

fprintf('%12.2f \t%s\n',x(d),variables{d})

end

fval

结果为:

Optimal solution found.

136328.74 I1

244000.00 I2

128159.00 HE1

143377.00 HE2

0.00 LE1

100623.00 LE2

8169.74 C

0.00 BF1

0.00 BF2

380328.74 HPS

271536.00 MPS

100623.00 LPS

6250.00 P1

7060.71 P2

11239.29 PP

760.71 EP

fval =

1.2703e+03检查解

fval 输出提供目标函数在任何可行点的最小值。

解向量 x 是目标函数具有最小值的点。请注意:

BF1、BF2 和 LE1 为 0,该值是它们的下界。

I2 为 244,000,该值是它的上界。

f 向量的非零分量为

HPS — 380,328.74

PP — 11,239.29

EP — 760.71

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
APM MATLAB混合整数非线性规划求解是一种强大的工具,可以应用于求解具有混合整数和非线性特性的优化问题。它使用MATLAB编程环境,并集成了APM(Advanced Process Monitor)优化软件,提供了一种灵活且高效的求解方法。 APM MATLAB混合整数非线性规划求解的独特之处在于它结合了整数规划和非线性规划的优点。整数规划适用于涉及决策变量为整数的问题,而非线性规划适用于涉及非线性约束和目标函数的问题。这个求解能够同时处理这两类问题,使得在实际应用中更加灵活和全面。 APM MATLAB混合整数非线性规划求解采用了一种多阶段的优化方法来求解问题。在每个阶段,它首先使用非线性规划方法来求解问题的松弛版本,得到一个近似解。然后,它将整数规划方法应用于该近似解,通过对决策变量采用适当的整数约束,得到一个更接近最优解的整数解。通过多个阶段的迭代,它逐渐逼近全局最优解。 APM MATLAB混合整数非线性规划求解还具有一些其他的特性和功能。例如,它支持不同类型的约束和目标函数,包括线性约束、非线性约束、等式约束和不等式约束。它还提供了一些高级的优化算法和技术,如动态规划、线性规划和二次规划等,以进一步提高求解效率和精度。 总之,APM MATLAB混合整数非线性规划求解是一种功能强大的工具,可以广泛应用于各种实际问题的优化求解中。它能够同时处理混合整数和非线性特性,通过多阶段的优化方法逐渐逼近全局最优解,并提供了一些高级的算法和技术来提高求解效率和精度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值