Ganzzahlige lineare Optimierung

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Uweli.

    Ganzzahlige lineare Optimierung

    Erstmal ein freundliches Hallo.
    Ich habe ein kleines Problemchen - Ich muss eine Ganzzahlige lineare Optimierung in VB abbilden.
    Folgender Sachverhalt:
    LKW-Beladung mit einer Anzahl (w...z) von 4 verschiedenen Produkten(P1...P4) beladen und dabei die Ladungsgrenze einhalten,
    sprich: (P1 * w) + (P2 *x) + (P3 *y) + (P4 * z) = Grenze
    Dabei sollen folgende Bedingungen erfüllt werden:
    w,x,y,z haben vorgegebene Minimalwerte und sind Ganzzahlig
    P1,P2,P3,P4 sind die Gewichte der einzelnen Produkte
    Grenze ist die Ladungsgrenze des LKW(z.B. 7,5t)
    Vieleicht hat jemand mal eine Idee, wie ich das abbilden kann oder
    kann mir einen Link mit einem Codebeispiel schicken.

    DANKE schonmal im voraus

    Uweli schrieb:

    wie ich das abbilden kann
    zunächst grafisch.
    Mal Dir ein paar Beispiele auf ein Blatt Papier und Du wirst sehen, wie einfach das ist.
    -----
    Haben w,x,y,z auch (je) einen Maximalwert?
    Da hast Du 4 ineinander geschachtelte For-Schleifen (für w,x,y,z), in der innersten rechnest Du aus, was Du brauchst und bei Erreichen der Testbedingung schreibst Du die Werte raus.
    Da sollte eine überschaubare Vielfalt rauskommen, mit der Du weiterarbeiten kannst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Na fein, da bist Du ja fast fertig.
    Mach mal die 4 ineinandergeschachtelten For-schleifen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Soweit so gut und nun?

    VB.NET-Quellcode

    1. Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
    2. Dim H As Integer
    3. Dim I As Integer
    4. Dim J As Integer
    5. Dim K As Integer
    6. Dim Hmin As Integer
    7. Dim Imin As Integer
    8. Dim Jmin As Integer
    9. Dim Kmin As Integer
    10. Dim Hmax As Integer
    11. Dim Imax As Integer
    12. Dim Jmax As Integer
    13. Dim Kmax As Integer
    14. Dim P1 As Double
    15. Dim P2 As Double
    16. Dim P3 As Double
    17. Dim P4 As Double
    18. Dim P1H As Double
    19. Dim P2I As Double
    20. Dim P3J As Double
    21. Dim Psum As Double
    22. Dim P4K As Double
    23. Dim Pmax As Double
    24. ' Multiplikatoren / Werte festlegen
    25. Hmin = NumericUpDown5.Maximum
    26. Imin = NumericUpDown6.Maximum
    27. Jmin = NumericUpDown7.Maximum
    28. Kmin = NumericUpDown8.Maximum
    29. Hmax = NumericUpDown1.Maximum
    30. Imax = NumericUpDown2.Maximum
    31. Jmax = NumericUpDown3.Maximum
    32. Kmax = NumericUpDown4.Maximum
    33. P1 = 100.25
    34. P2 = 150.3
    35. P3 = 200.1
    36. P4 = 250.258
    37. Pmax = 7500
    38. For H = Hmin To Hmax
    39. P1H = P1 * H
    40. Psum = P1H + P2I + P3J + P4K
    41. For I = Imin To Imax
    42. P2I = P2 * I
    43. Psum = P1H + P2I + P3J + P4K
    44. For J = Jmin To Jmax
    45. P3J = P3 * J
    46. Psum = P1H + P2I + P3J + P4K
    47. For K = Kmin To Kmax
    48. P4K = P4 * K
    49. Psum = P1H + P2I + P3J + P4K
    50. If Psum = Pmax Then
    51. 'Hier kommt dann der Austieg
    52. End If
    53. Next
    54. Next
    55. Next
    56. Next
    57. End Sub

    Uweli schrieb:

    und nun?
    Gib da mal ein paar Daten aus und sieh sie Dir an.
    Überzeuge Dich davon, dass Deine Berechnung stimmt!!!
    Setze einen Haltepunkt rein und verfolge den Programmablauf und die Daten, gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!