Bibliothèque recommandée pour la programmation linéaire en .Net?

Quelqu’un peut-il recommander une bibliothèque – gratuite, ou commerciale, mais abordable (

Il y en a quelques uns énumérés ici: http://en.wikipedia.org/wiki/Programming_Linéaire#Solvers_and_scripting_.28programming.29_languages

…. mais je commence tout juste avec LP et espère que quelqu’un pourra recommander quelque chose.

J’essaie essentiellement de minimiser les prix des services d’abonnement de téléphonie cellulaire.
Je suppose que la 1ère question est : la programmation linéaire est-elle même applicable à la résolution de ce problème?

Un exemple simplifié:

Options du plan de base
Plan A: 200 minutes de voix, 10 messages texte, 10 Mo de données = 25 $
Plan B: 400 minutes de voix, 25 messages texte, 25 Mo de données = 40 $
Plan C: 1 000 minutes de voix, 50 messages texte, 50 Mo de données = 65 USD

Plan F: 2 500 minutes de voix, 150 messages texte, 150 Mo de données = 95 €

Frais pour dépassement de votre forfait (dans tous les cas):
0,10 $ par minute de voix
0,20 $ par message texte
1,50 USD par Mo de données

Packages complémentaires facultatifs (ajoutés au plan de base):
Week-ends gratuits 15 $
Soirées et fins de semaine gratuites (après 20h) 20 $
Soirées et fins de semaine gratuites (après 18h) 35 $ de SMS pour le forfait n ° 1 (50 SMS) 5 $
Paquet de SMS # 2 (150 SMS) 10 $
Paquet de données n ° 1 (données de 20 Mo) 20 $
Paquet de données n ° 2 (données de 50 Mo) 30 $
Chatty User Mixed Pack # 1 (voix de 100 minutes, 100 messages texte) 15 $
Geeky User Mixed Pack # 1 (voix de 50 minutes, données de 150 Mo) 35 $
etc, etc etc

J’ai un dataset d’utilisation détaillées pour 50 utilisateurs et je veux savoir quelle combinaison de forfait de base (A, B, C … F) chaque personne devrait être active, ainsi que les packages complémentaires. Ils devraient avoir.

Vous pouvez essayer Microsoft Solver Foundation . C’est une bibliothèque de programmation mathématique, qui prend en charge la résolution de problèmes de programmation linéaire, de programmation mixte à nombres entiers, de programmation stochastique et autres problèmes d’optimisation et de modélisation.

Il est disponible dans les éditions Express (Gratuit), Standard et Entreprise (Abonnements MSDN).

Tout d’abord, je suppose que vous aurez peut-être besoin de quelque chose de plus complexe qu’un simple résolveur de LP. La plupart des services de téléphonie mobile ont des points d’arrêt pour lesquels vous pouvez passer d’un service à un autre en fonction de la durée, de la fréquence, de l’heure de la journée, etc. ) solveur. (Si toutes vos fonctions de coûts et vos contraintes sont convexes, vous pourriez vous en tirer avec un solveur LP, mais cela nous devance un peu). La bonne nouvelle est qu’il existe également des solveurs MILP à source ouverte et abordables.

Je commencerais par LP SOLVE ou SYMPHONY. Consultez le site COIN-OR ici pour quelques informations utiles.

En réponse à la description améliorée de votre problème, je pense que vous pouvez simplement prendre chacun des 50 utilisateurs et chiffrer chaque plan, puis appliquer chacune des options individuellement. Avec n utilisateurs, m plans possibles et p options possibles, vous devez examiner les options m * p pour chaque utilisateur, mais c’est ennuyeux.

Une question plus intéressante du sharepoint vue de l’utilisateur est la suivante: où sont les points de rupture entre les plans? Pouvez-vous définir des courbes d’indifférence – des combinaisons d’utilisation dans lesquelles l’utilisateur serait indifférent entre deux plans? Cette question pourrait être abordée mathématiquement en utilisant probablement certaines techniques d’algèbre linéaire, mais comme il n’ya vraiment pas de fonction objective, cela ne semble donc pas être un MILP.

Une autre question intéressante du sharepoint vue du fournisseur: comment définir des plans pour maximiser les profits? Ici, vous pouvez appliquer une optimisation si vous prenez vos 50 utilisateurs pour qu’ils soient représentatifs de la population. Il vous faudrait imposer un plafond au coût total pour un utilisateur et append des coûts pour générer des bénéfices, mais je pense qu’une formulation est possible.

Découvrez le kit de programmation linéaire GNU.

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