在.Net中用于线性规划的推荐库是什么?

10

有人可以推荐一个库吗 - 免费的,或者商业的但价格实惠 (http://en.wikipedia.org/wiki/Linear_programming#Solvers_and_scripting_.28programming.29_languages)。我刚开始接触线性规划希望能有人推荐一些东西。

我想基本上是为了使手机订阅服务的定价最小化。我想第一个问题是:线性规划是否适用于解决这个问题?

一个简化的例子:

基本计划选项
A计划:200语音分钟,10条短信,10MB数据 = $25
B计划:400语音分钟,25条短信,25MB数据 = $40
C计划:1000语音分钟,50条短信,50MB数据= $65
...
F计划:2500语音分钟,150条短信,150MB数据= $95

超出套餐的收费(适用于所有情况):
每分钟0.10美元
每条短信0.20美元
每MB数据1.50美元

可选的附加包(添加到基本计划中):
免费周末 $15
免费晚上和周末(8点后)$20
免费晚上和周末(6点后)$35 短信包#1(50条短信)$5
短信包#2(150条短信)$10
数据包#1(20MB数据)$20
数据包#2(50MB数据)$30
话痨混合包#1(100分钟语音,100条短信)$15
极客混合包#1(50分钟语音,150MB数据)$35
等等等

我有50个用户的详细使用数据,想确定每个人应该使用哪种基础计划(A、B、C...F)以及哪些附加包。

3个回答

9
你可以尝试使用Microsoft Solver Foundation。它是一个数学编程库,支持解决线性规划、混合整数规划、随机规划和其他优化建模问题。

它有Express(免费)、Standard和Enterprise(MSDN订阅)版本可供选择。


解算器似乎已经从这个库中消失了。 - Joe Healy

3
首先,我猜想你可能需要比简单的LP求解器更复杂的东西。大多数手机服务都有断点,您可能需要根据通话长度、频率、时间等因素切换到另一个服务。这种切换意味着需要整数变量,这意味着您可能需要MILP(混合整数线性规划)求解器。(如果您所有的成本函数和约束都是凸函数,您可以使用LP求解器,但这有点超前了)。好消息是,也有开源和实惠的MILP求解器。

我建议从LP SOLVE或SYMPHONY开始。请查看COIN-OR网站here获取一些有用的背景信息。

针对您增强的问题描述,我认为您可以简单地将50个用户中的每一个用户的费用计算出来,然后分别应用每个选项。对于n个用户和m个可能的计划以及p个可能的选项,您需要查看每个用户的m*p个选项 - 但这有点无聊。

一个更有趣的问题从用户角度来看是:计划之间的分界点在哪里?你能定义无差别曲线-使用组合,使得用户在两个计划之间感到无所谓吗?这个问题可能需要使用一些线性代数技术来进行数学处理,但实际上没有一个客观函数,因此似乎不像MILP。
另一个有趣的问题是提供者的角度-如何设置计划以最大化利润?如果您将50个用户视为人口的代表,则可以应用一些优化。您需要对用户的总费用设定上限,并增加成本以获得利润,但我认为可以制定一种公式。

现在我更详细地描述了问题,您能否再次发表评论?谢谢 :) - tbone
谢谢更新...这是一个很好的思考材料... - tbone
请保持更新 - 这是一个有趣的问题。 - Grembo
LP 不能解决手机计划问题这一事实让我感到欣慰,因为我从来都无法理解它们。 - swestner

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接