算法实验之线性规划解决配料问题

本文介绍了如何使用线性规划解决配料问题,重点探讨了单纯形法的算法步骤、计算模型和实验结果。通过将问题转化为标准形式,通过初始化和最优化过程寻找最优解,以实现营养成分需求的同时降低总成本。实验结果显示,单纯形法在解决此类问题时表现出色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

公式和图片不显示...

1 问题描述

    食谱/配料问题:设有n种配料,每种配料含有m种营养成分,用 表示一个单位的第 j (j<=n)种配料中含有的第 i (i<=m)种营养成分数量,用 表示对第 i 种营养成分的最低需要量,表示第 j 种食品的单价,表示所用的第 j 种食品的数量,配料问题的求解即解决应如何搭配食物(即求解), 一方面满足种营养成分的需要,同时使食物的总成本最低的问题。

 

2 问题的相关背景描述

这类问题其实是在计划任务确定的情况下,如何统筹安排,用作少的资源来实现任务要求,可以抽象为一个求极小值的问题。对于社会实际问题而言,这类问题研究和应用的内容是实现系统的投入产出的问题,用最少的劳力和物力等投资消耗,获利更多更好的社会需求产品。

解决配料问题常用的方法是图解法和单纯形法。图解法虽然清晰直观、方便简单,但是只适用于二维的线性规划问题,在我们的高中时期经常用到。单纯形法的优点是可以适用于所有的线性规划问题,但是单纯形法中涉及大量不同的算法,为了针对不同的线性规划问题,计算量大,复杂繁琐。除此之外还有内点法、椭球法等求解线性规划问题的算法。

 

参考文献:第1卷第1期 西昌学院学报·自然科学版 Vo1.1,No.12013年06月 Journal of Xichang College·Natural Science Edition Jun.,2013

3.问题分析

解决线性规划问题,首先要对线性规划问题建立数学模型,确定目标函数和相应的约束条件。

从实际问题中建立数学模型一般有以下步骤:

(1)、根据所求目标的影响因素找到决策变量;

(2)、由决策变量和所求目标的函数关系确定目标函数;

(3)、由决策变量所受的限制条件确定决策变量所需要满足的约束条件。

3.1单纯形法(主要)

算法步骤:

(1)、将非标准型线性规划化成标准型,加入松弛变量;

(2)、求出线性规划的初始基可行解,列出初始单纯形表;

(3)、进行最优解检验。如果表中所有检验数小于等于零,则表中的基可行解就是问题的最优解,计算停止,否则进行下一步。

(4)、从一个基可行解转换到另一个目标值更大的基可行解,列出新的单纯形表。确定换入基的变量,当有一个以上检验数大于0时,一半选择最大的一个检验数,其对应的作为换入变量;确定换出变量,根据计算并选择,选最小的对应基变量作为换出变量;用换入变量替换基变量中的换出变量,得到一个新的基。对应新的基可以找出一个新的基可行解,并相应地可以画出一个新的单纯形表。

(5)、重复(3)(4)步骤直到计算结束为止。

算法评估:平均计算量统计O(n)

3.2椭球法

算法步骤:

(1)、变换问题提法:原问题:,    对偶问题:, ,于是知,若有最优解则构造的下述复合不等式必成立:,;

(2)、变换上述不等式并试图求解,然后构造一个大的球体,使其必包含不等式可行解(若存在的话),对球心判断是否为可行解,若是,结束,否则,切割球体(切去肯定不包含可行解的部分)直至找到可行解,或证明无可行解。

算法评估:并不实用,计算量

3.3内点法

算法步骤:

算法评估:计算量 平均计算量统计O(lgn)

3.4蛮力法

算法步骤:根据条件将解空间缩小后,在解空间中搜索最优解

算法评估:在特殊情况下可能会表现突出,但是更普遍的情况下并不适用。

 

 

由于单纯形法更具有普遍性,在解决配料问题等各类线性规划问题方面也表现突出,所以单纯形法是我们组重点研究的对象。

 

 

4.计算模型

1、  化为标准形式

 

 

2、  化为松弛形式

此时依然成立, 我们将这些变量称为非基变量,它们构成的集合记为N。将这些变量称为基变量,它们构成的集合记为B。简单地理解,非基变量能够由基变量唯一确定。

s.t.

3、  初始化过程

如果b向量并不全为非负,则我们需要通过初始化过程来找到一个可行解,然后才可以使用最优化过程进行优化。当然,此时原线性规划不一定存在可行解。具体的方法是,加入一个新的非基变量,并在原线性规划的基础上构造一个新的辅助的线性规划。

 注意这里N集合并不包含。然后,选择一个基变量使得最小,执行转轴操作pivot(d, 0)。不难证明该操作过后所有的b值全部非负。然后,使用前文中所述的最优化过程求解该辅助线性规划。由于非负,因此该线性规划的答案非正。如果答案为负数,则说明原线性规划不可能让所有的基变量都非负,因此原线性规划无可行解。否则,只要令所有变量为0,并去掉变量,就可以得到可行解。在从辅助线性规划转化到原来的线性规划的过程中,如果已经是非基变量,则可以将其从约束条件和目标函数中直接去掉。否则,需要任取一个非基变量执行pivot(0,e),将变为非基变量。由于此时是基变量且=0,故一定成立,因此这个转轴操作不会破坏b向量的非负性。

4、  最优化过程

如果b向量所有元素非负,则显然我们只需要令所有的变量等于0,就可以得到一个可行解。在这种情况下,通过下述最优化过程,我们可以得到该线性规划的最优解,或者指出该线性规划的最优解为无穷大(不存在)。

1、任取一个非基变量,使得。

2、选取一个基变量,使得,且最小化

3、执行转轴操作pivot(d, e),并转到第一步继续算法。

根据的最小性不难证明pivot(d, e)不会破坏b的非负性。因此将所有变量取0值仍然是可行解。同时,根据,我们发现v一定是不降的。这就达到了更新解的目的。不难发现,算法终止有两种情况:

1、对于所有的非基变量,c均非正。

2、对于某一个e,所有的均非正。

可以证明,对于第一种情况,我们已经得到了该线性规划的最优解。当前的v即为答案。严格证明比较复杂,但是直观上是很容易理解的。因为所有的非基变量都是非负的,而所有的c都是非正的,因此只要某个非基变量不为0,就会使得目标函数更小。对于第二种情况来说,很容易证明此时线性规划的最优解是无穷大。只要让其他所有变量均为0,变量为正无穷。由于所有的都非正,因此非基变量的非负性得到保证。同时由于,目标函数值为正无穷。

5、  选取入基变量离基变量

步骤1:选入基变量。如果所有≤0,则当前基本可行解为最优解,计算结束。否则,取>0,相应的非基本变量为入基变量。

步骤2:选离基变量。 对于入基变量,如果所有≤0(i=1,2, …, m),则最优解无界,计算结束。否则,计算

</

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值