推荐的.Net中的线性编程库?

时间:2010-06-03 19:22:29

标签: c# .net linear-programming

任何人都可以推荐图书馆 - 免费或商业但价格实惠(

这里列出了一些: http://en.wikipedia.org/wiki/Linear_programming#Solvers_and_scripting_.28programming.29_languages

....但我刚刚开始使用LP,并希望有人可以推荐一些东西。

我试图基本上尽量减少手机订阅服务的定价 我想第一个问题是:线性编程甚至适用来解决这个问题?

简化示例:

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

超出计划的费用(适用于所有情况):
每个语音分钟$ .10 每条短信$ .20 每MB数据1.50美元

可选附加软件包(添加到基本计划):
免费周末$ 15
免费晚上和周末(晚上8点后)20美元 免费晚上和周末(下午6点后)35美元 短信包#1(50短信)$ 5
短信包#2(150短信)$ 10
数据包#1(20 MB数据)$ 20
数据包#2(50 MB数据)30美元 Chatty User Mixed Pack#1(100分钟语音,100条短信)$ 15
令人讨厌的用户混合包#1(50分钟语音,150 MB数据)$ 35
等等等

我有50个用户的一组详细的使用数据,并想知道每个人应该在哪个基本计划组合(A,B,C ... F),以及哪些附加包(s)他们应该有。

3 个答案:

答案 0 :(得分:8)

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

可在Express(免费),标准版和企业版(MSDN订阅版)中使用。

答案 1 :(得分:3)

首先,我猜你可能需要比简单的LP解算器更复杂的东西。大多数手机服务都有断点,您可能希望根据呼叫长度,频率,一天中的时间等从一种服务切换到另一种服务。这种切换意味着需要整数变量,这意味着您可能需要一个MILP(混合整数线性编程)解算器。 (如果你的所有成本函数和约束都是凸的,那么你可以使用LP求解器,但是这已经超越了我们自己。)好消息是,那里也有开源和负担得起的MILP解决方案。

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

为了回应您增强的问题描述,我认为您可以简单地将50个用户中的每一个用于每个计划,然后单独应用每个选项。有n个用户和m个可能的计划和p个可能的选项,你需要查看每个用户的m * p选项 - 但这有点无聊。

从用户的角度来看,一个更有趣的问题是:计划之间的断点在哪里?你能定义无差异曲线 - 用户在两个计划之间无关紧要的用法组合吗?这个问题可以在数学上解决,可能使用一些线性代数技术,但实际上没有一个客观函数,所以它看起来不像一个MILP。

从提供商的角度来看另一个有趣的问题 - 如何制定计划以实现利润最大化?如果您让50位用户代表人口,您可以在这里应用一些优化。您需要对用户的总成本设置上限并增加成本以获取利润,但我认为可以采用一种方式。

答案 2 :(得分:1)

查看GNU Linear Programming Kit。

http://www.gnu.org/software/glpk/