谭泽汉 陈万锐
摘 要 本文阐述了一种数学规划的方法,通过循环迭代插值的方法将整数规划、0、1规划结合起来解决带约束的线性规划问题。并即将其应用于钢材采购中,达到了很好的效果。
关键词 PSO算法;神经网络算法;空调物理模型;参数估计
中图分类号 O29 文献标识码 A 文章编号 1674-6708(2016)162-0201-02
1 背景介绍
采购钢材时,在进行商务谈判时经常会有这样或那样的约束条件。比如:请设定如果单规格总量≤100t时,只分配一个供应厂家;若单规格钢材总量>100t时,需保证分配给厂家的数量必须为20的整数倍(还要根据双方商务交谈结果,可以随时改动数值,例如,20/50/100等;某供应厂家某型号钢材的分配量必须为该供应厂家分配总量的X%(要求任何一个钢厂都有这样的功能,X为0-100之间的整数);每个供应厂家都有一个对应的最小供货量等。
我们的目的是在满足这些约束条件下实现采购总价最小。很自然会想到使用线性规划的理论。但要考虑这些约束条件,自动识别多种商务约定的订单限制条件,就只能自己设计的相关算法自动完成每个供应商采购数量的最优选择。
2 方案思路
首先,对数据进行建模,确定目标函数,本文涉及到整数规划,0,1规划,线性规划的组合。其次,求最优,将数学规划的结果按大于100,和小于等于100分为2部分;第三,结果小于等于100部分,按最优解趋势依次求出数据并写入到输出的EXCEL中;第四,结果大于100,部分,先按线性规划求出最优解,其次按“四舍五入”转化为指定数据倍数,然后剩余部分根据最优结果或价格从小到大依次进行插入到输出的EXCEL中;最后对输出的EXCEL数据进行合并。
其核心思路是:1)在线性规划的基础上,运用最优差值实现0-1规划和整数规划;2)每次按某种约束条件进行数学规划得到最优解后,要循环迭代更新需求条件。比如优化找到第一个最大值,则总数减去该优化值,再次优化寻找第二个最大值,如此循环迭代更新需求。如图1所示。
图1为举例,目标函数的系数4851,3326等均为杜撰的价格值。
选择0,1规划是因为约束条件中要求小于100t的钢材,只能分给1个厂家,则每次求出的结果,有且仅有1个不等于0,其它的解均为0。
选择整数规划是因为约束条件要求分配的结果为20的倍数,如果求解出的结果有小数,就向下取整到20的倍数,然后再观察结果是否满足小于等于订单的要求,如果结果大于订单的要求,就继续向下取整到20的倍数。直到结果满足小于等于订单的要求。然后更新订单的需求,再次选择0,1规划,将小于100t的钢材,只分给1个厂家。
3 循环迭代插值代码实现
为方便示例,本文的代码使用Matlab进行描述。代码中核心实现的是根据最优趋势,根据最优结果或价格高低将计算结果插入到输出表,即把计算出的结果按价格从小到大插入剩余部分,通过循环迭代更改需求的方法实现最优计算,本文称之为循环迭代插值。
这部分的代码实现如下:
function [m, mb] = bestinsert(beq, mbest, m,A, b, varargin)
% m是数量数组,mb是不等式系数值,beq是等式值,mbest是最优结果,A是不等式系数, b是不等式值
4结论
本文介绍了一种带约束条件的数学规划算法,通过循环迭代插值的方法解决了整数规划,0,1规划和线性规划的有机结合。实践使用发现对比人工使用EXCEL进行计算,本文介绍的方法可优化12%以上。
参考文献
[1]《运筹学》编写教程组.运筹学[M].4版.北京:清华大学出版社,2012,9.