Is het mogelijk om lineaire programmering te gebruiken om dit probleem op te lossen?

Ik probeer software te schrijven om de prijzen voor abonnementsdiensten voor mobiele telefoons te minimaliseren, dat wil zeggen: kies het optimale plan voor elke klant in een grote groep.

Zou iemand kunnen zeggen of dit mogelijk is via lineair programmeren?

Hier is een beschrijving van het probleem (de nummers in de voorbeelden zijn mogelijk niet realistisch, dus probeer dit te negeren):

Basisplanopties

Plan A: 200 Voice minutes, 10 Text Messages, 10 MB Data  =  $25    
    Plan B: 400 Voice minutes, 25 Text Messages, 25 MB Data  =  $40    
Plan C: 1000 Voice minutes, 50 Text Messages, 50 MB Data =  $65    
    ...   
    Plan F: 2500 Voice minutes, 150 Text Messages, 150 MB Data =  $95  

Kosten voor het overschrijden van uw abonnement (voor alle gevallen):

$.10 per voice minute  
    $.20 per text message  
$1.50 per MB Data

Optionele add-on-pakketten (toegevoegd aan basisplan):

Free Weekends  $15  
    Free Evenings and Weekends (after 8PM)  $20  
Free Evenings and Weekends (after 6PM)  $35
    Text Message Package #1 (50 Text Messages)  $5  
Text Message Package #2 (150 Text Messages)  $10  
    Data Package #1 (20 MB Data)  $20    
Data Package #2 (50 MB Data)  $30  
    Chatty User Mixed Pack #1 (100 Minutes Voice, 100 Text Messages) $15  
Geeky User Mixed Pack #1 (50 Minutes Voice, 150 MB Data) $35  
etc, etc etc  

Dus als ik een set gedetailleerde gebruiksgegevens heb voor bijvoorbeeld 500 gebruikers, wil ik uitzoeken welke combinatie van basisplan (A, B, C ... F) elke persoon zou moeten hebben, evenals welke add-on pakketten (s) ze zouden moeten hebben.

In de voorbeelden van basispakketten en optionele invoegtoepassingen die ik heb gegeven, probeerde ik duidelijk te maken dat er zoveel overlappende opties zijn dat brute force-berekening van elke optie voor elke gebruiker onpraktisch is.

Dus mijn vraag is, kan dit op de een of andere manier efficiënt worden gedaan via lineair programmeren?
En als dat het geval is, zou ik alle tips of aanwijzingen waarderen waar een ervaren softwareontwikkelaar zonder expertise in lineair programmeren zou kunnen beginnen?

Bijwerken

Bedankt voor de nuttige opmerkingen tot nu toe. Dankzij DoubleJay weet ik nu dat dit een programmeerprobleem met een geheel getal is. En ja, ik zal absoluut een 3rd party solver gebruiken, ik heb er een nodig die kan worden gecalld vanuit .Net-platform, dus als iemand suggesties heeft voor een betaalbare oplossing, laat het me weten.

Als ik de oplosser eenmaal heb, is het uitzoeken van hoe dit probleem zich voordoet mijn volgende probleem, dus alle tips over waar je zou beginnen te leren, zouden ook zeer op prijs worden gesteld.

(Probeer ook stackoverflow, maar dacht dat hier waarschijnlijk meer expertise voor dit specifieke probleem zou zijn).

4
Misschien kunnen mensen op stapeloverstortingen u ook bij deze helpen?
toegevoegd de auteur DavidEBest, de bron
Nee, dit vereist integer programmeren. Tenzij je een paar weken vrij hebt om het probleem op te lossen, programmeer de oplosser dan niet zelf - gebruik iemand anders. Wat betreft hoe het te doen? Dat is nogal ingewikkeld om uit te leggen. Kortom, u wilt een beslissingsvariabele voor spraak-, tekst- en gegevensgebruik, met een objectieve functie die in die drie plus vaste kosten op één lijn is gebaseerd op de invoegtoepassingen (die worden bepaald door logische beperkingen voor gehele getallen (bijv. Min. GRATIS WEEKENDS, GEBRUIKSWEEKEND) , met de keuze tussen hen een XOR Dit is erg schetsmatig).
toegevoegd de auteur Campbell, de bron
Het is niet moeilijk om alles te formuleren - iedereen met een beetje lineaire/integere programmeerachtergrond zou hierbij moeten kunnen helpen. Maar probeer zeker een bestaande oplosser te krijgen (hoewel je zeker geen zware commerciële versie nodig hebt, tenzij je dataset gigantisch is).
toegevoegd de auteur Campbell, de bron
Volgens deze webpagina (glpk-cli) is er een manier om GLPK (die wel een Windows-versie heeft) te krijgen om te communiceren met .NET: glpk-cli.sourceforge.net
toegevoegd de auteur David Richerby, de bron
De meest betaalbare oplosser is GLPK, die gratis is, maar ik weet niet zeker of deze op uw platform zal worden uitgevoerd. Voor meer mogelijkheden bekijk de Veelgestelde vragen over programmering. faqs.org/faqs/linear-programming-faq CPLEX is de top -van-het-lijn-pakket, maar het is duur. Tien jaar geleden, toen ik moest beslissen welk pakket ons bedrijf moest kopen, herinner ik me dat ik onder de indruk was van XPRESS-MP als een iets meer betaalbaar maar ook heel goed systeem. CPLEX is een ILOG-product (nu IBM) en XPRESS-MP is een Dash Optimization-product (nu FICO).
toegevoegd de auteur Joel Brown, de bron

Geen antwoorden

0