本帖最后由 Lynn.Dou 于 2021-8-30 13:56 编辑
1、一个小故事
在开始本篇文章之前,先抛出一个小故事,大家可以思考下如何解决。
1948年6月24日,前苏联封锁了从东德到柏林的所有陆路和水路。组织了一次巨大的空运,使用美国和英国的飞机向西柏林超过 200 万人提供食物、衣服和其他物资。
其中美国飞机的货运容量为 30,000 立方英尺,可容纳人数为16人,每周成本费用为9000美元。
英国飞机的货运容量为 20,000 立方英尺,可容纳人数为8人,每周成本费用为5000美元。
为了打破苏联的封锁,西方盟国必须最大限度地提高货运能力,但受到以下限制:
1、最多只能使用 44 架飞机。
2、每周总费用可能超过 300,000 美元
3、飞机总人员不能超过 512 人。
请问为了最大化的提高货运能力,美国飞机和英国飞机的数量应该如何分配呢?
2、强大的功能:规划求解
仔细理解这个问题,需要考虑多种分配结果去计算最终的货运量,并通过比较找到最优值,如果靠人为去计算的话,是一个很复杂的过程。
在Excel中有个强大的功能:规划求解,可以利用这一功能自动计算最大货运量,可谓是”计算神器“。
我们先根据已知条件列个表,便于计算。
通过规划求解功能,计算结果如下:
具体计算过程这里就不介绍了,大家可以自行搜索学习下如何操作规划求解。(附件提供了图片所示excel文件)
3、jsLPSolver
这个时候可能就有小伙伴想到了,既然规划求解功能这么强大,SpreadJS支持此功能吗?
规划求解虽然使用起来很方便,但内部计算机制很是复杂,SpreadJS目前还不支持此功能,正在努力钻研中。
但是~
在gitHub上有一个开源项目jsLPSolver,可以实现简单的规划求解,
使用方式也很简单,按照一定的结构写好model,再使用Solve方法进行计算,就可以获取到指定条件下的最优计算结果了。
官方示例代码:
- var solver = require("./src/solver"),
- results,
- model = {
- "optimize": "capacity",
- "opType": "max",
- "constraints": {
- "plane": {"max": 44},
- "person": {"max": 512},
- "cost": {"max": 300000}
- },
- "variables": {
- "brit": {
- "capacity": 20000,
- "plane": 1,
- "person": 8,
- "cost": 5000
- },
- "yank": {
- "capacity": 30000,
- "plane": 1,
- "person": 16,
- "cost": 9000
- }
- },
- };
- results = solver.Solve(model);
- console.log(results);
复制代码 输出结果:
- {feasible: true, brit: 24, yank: 20, result: 1080000}
复制代码 可以看到与Excel的计算结果是一致的。
具体大家点击下方地址进行学习:
https://github.com/JWally/jsLPSolver#readme
那么是否可以利用组件版设计器强大灵活的自定制能力,实现一个简单的规划求解功能呢?
我们来测试下......
感兴趣的小伙伴可以点击下方链接学习:
SpreadJS结合jsLPSolver实现规划求解 - part2
|
|