加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

10.7线性规划新算法

(2022-03-17 14:45:51)
标签:

回忆录

教育

情感

文化

杂谈

方教授提出一种新的线性规划的无约束凸规划算法之后,我便萌生了开发这种算法的计算机程序实现的想法。我把这种想法跟方教授交流后得到了他的大力支持。于是我便着手开展工作。既然是无约束的凸规划问题实际上就是一个多变量的凸函数的优化问题,我在华工当硕士生时在这方面有很好的训练。其根本问题就是从一个初始解开始,选择一个搜索方向,确定一个适当的步长,然后反复迭代,直到满足停止准则为止。但是由于方教授提出方法中的凸函数是一个指数函数,变量在搜索中一变化很容易使指数值变得极大,从而造成计算机出现“指数函数溢出”的错误。所谓“溢出”就是指数值超过了计算机所能表达的最大实数值的范围。比如,一般计算机的最大实数值是1.0x1099,那么超过这个值计算机就出错了,计算便不得不停止。于是控制计算机不出现溢出变成了这个算法实现的关键点。所有的搜索方向和搜索步长选择的考量都必须遵从“控制溢出“的原则。

按道理当目标函数是凸函数且处处二阶可微时,牛顿法或拟牛顿法应该是最快的方法。但是由于函数的奇异性,牛顿法和拟牛顿法都不能保证每一步的搜索方向都是下降方向,这样一旦函数值增大就很容易出现“溢出”。而只要能保证每一步迭代的搜索方向都是下降方向就能很容易控制不发生溢出。而最简单的“最速下降法”,即简单的梯度法,反而能保证所选的方向是下降方向。但是梯度法的缺点就是所谓的“锯齿现象”,带来搜索的速度太慢。于是我采用了Fletcher-Reeves的共轭梯度法和最速下降法结合的混合算法。这是因为共轭梯度方向也不能保证是下降方向,但检测到共轭梯度方向不能保证函数值下降时我就改用最速下降法,这种混合算法兼顾了溢出的控制和搜索的有效性,取得了较好的效果。

确定搜索步长实际上就是一维搜索问题,所有的无约束凸函数的优化绝大部分计算时间都是花费在一维搜索上。我在念硕士时跟王书宁在这个问题上有很多交流。当时我开发了一个基于黄金分割的极为精悍快速的一维搜索小程序,这时候便成为我的看家本领使了出来。

方教授的新方法的创新之处就是在卡玛卡的线性规划标准型上引进熵函数(实际用的是负熵)作为摄动函数,从而发现其对偶函数是一个无约束的凸函数。那么这个熵在计算中起到什么作用呢?这个问题引起了我的注意,通过不同数值例子的计算,我发现当最优解的熵较大时计算就比较困难,而当解的熵比较小时算起来就很快。当我把这个发现告诉方教授时,他非常高兴。记得那一天是周末,计算机室里只有我们两个人。方教授坐在计算机台上一脸沉思,然后说:“这就对了!熵就是乱度,好比阳光照在石碑上,熵大就是碑上的字刻得模糊不清,熵小就是字刻得清楚。字刻得清楚,有点光就很容易读出碑文了。”迄今已过去30年了,方教授精辟的比喻和他那凝重而沉思的面容还时常浮现在我脑海里。

10.7线性规划新算法
     
(我和方述诚在清华,1993年)

根据熵和解的关系的发现,我推断出对于蜕化型的线性规划问题,用这个算法算起来非常快,而对于非蜕化型的问题算起来比较慢。对于蜕化型的问题摄动参数取得大一些也没有关系,而对于非蜕化型问题,摄动参数的取值就必须跟要求达到的精度相关,我还研究出了一套摄动参数取值的计算方法。算法设计和程序开发完成后,我对不同规模的数值例子进行了计算,最大规模的例子是100个变量50个约束的例子,经过26步迭代,计算时间11秒,就可取得精确的最优解。这项工作我写了一个研究报告,作为北卡州大工业工程系技术报告发表,编号IE Technical Report No.90-12。虽然不是正式出版物,但总算是一项成绩。后来我在中文杂志《数值计算与计算机应用》上也发表了一篇题为“线性规划无约束凸规划算法的计算实现”的论文。这就能算是一项成果了,当然不算起眼。

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有