Transportproblem

Hallo an alle Tüftler,

mich lässt folgende Aufgabe nicht in Ruhe:

Ich habe zwei Kisten eine fasst 15 kg und eine 20 kg. Ich bekomme nun eine Transportaufgabe über eine gewisse Menge ( kg ) die ich in die Kisten verteilen soll.
z.B. 35 kg = 1 Kiste a 15 kg und 1 Kiste a 20 kg ( optimal )
66 kg = 3 x 20 und 1 x 15 ( 9 kg zu wenig in Kiste 15 )
besser : 2 x 20 und 2 x 15 ( nur 4 kg zu wenig in letzter 15 kg Kiste )
( Es werden immer ganze Kisten transportiert )
usw.

Ich habe mir eine Tabelle gemacht bis 400 kg und immer schön von Hand probiert. Was ist aber wenn sich das Fassungsvermögen der Kisten ändert ??? Die ganze Tabelle von vorne …

Das müsste doch auch mit einem kleinen Programm (Makro ) zu schaffen sein das mir immer die günstigste Kombination rechnet.
Hat vielleicht jemand eine Idee ?

Keine Lösung, aber …
Hallo
Dieses Problem wurde in anderer „Verkleidung“ hier schon mal abgehandelt. Ich schätze, es ist etwa ein Jahr her. Es erinnert sich bestimmt noch jemand genauer und kann dir helfen.

auch keine Lösung, aber …
Hallo Heiner,

vor gut 2 Jahrzehnten ist mir das in der Uni untergekommen:
Google mal nach den Stichworten:
Vogelsche Approximationsmethode
Simplex-Verfahren

Möglicherweise ist Deine Frage auch gut im Mathe-Brett aufgehoben

Viel Glück
jwd

Hallo Heiner,

ich hatte zunächst versucht das Problem mit dem Solver zu lösen. Funktionierte aber nicht 100%-ig, da ich die Bedingungen nicht alle sauber einschränken konnte.

Meine Makrolösung sieht so aus:

Sub Kisten()
' Für das Gewicht wird die optimale Anzahl Kisten bei minimalem Restleergewicht ermittelt.
 Dim Anzahl1 As Integer, Anzahl2 As Integer, Kiste1 As Double, Kiste2 As Double
 Dim Anzahl As Integer, DiffGew As Double, Gewicht As Double
 Gewicht = ThisWorkbook.Sheets("Tab1").Range("B1").Value 'vorgegebenes Gewicht
 Kiste1 = ThisWorkbook.Sheets("Tab1").Range("B3").Value 'max. Gewicht Kiste 1
 Kiste2 = ThisWorkbook.Sheets("Tab1").Range("B4").Value 'max. Gewicht Kiste 2
 DiffGew = Application.WorksheetFunction.Max(Kiste1, Kiste2)
 Anzahl = Application.WorksheetFunction.RoundUp(Gewicht / Kiste1, 0) \_
 + Application.WorksheetFunction.RoundUp(Gewicht / Kiste2, 0)
 For I = 0 To Application.WorksheetFunction.RoundUp(Gewicht / Kiste1, 0)
 For J = 0 To Application.WorksheetFunction.RoundUp(Gewicht / Kiste2, 0)
 If I \* Kiste1 + J \* Kiste2 - Gewicht \>= 0 Then
 If DiffGew \>= I \* Kiste1 + J \* Kiste2 - Gewicht Then
 If Anzahl \> I + J Then
 DiffGew = I \* Kiste1 + J \* Kiste2 - Gewicht
 Anzahl1 = I
 Anzahl2 = J
 Exit For
 End If
 End If
 End If
 Next J
 Next I
 ThisWorkbook.Sheets("Tab1").Range("D3").Value = Anzahl1 'Anzahl Kisten 1
 ThisWorkbook.Sheets("Tab1").Range("D4").Value = Anzahl2 'Anzahl Kisten 2
End Sub

zugehörige Tabelle: Tab1

 A B C D 
1 Gewicht 22 kg 
2 Anzahl 
3 Kiste 1 20 kg 0 
4 Kiste 2 15 kg 2 
5 
6 Gesamtanzahl 2 
7 Restkilogramm 8 

Benutzte Formeln:
D6: =SUMME(D3:smiley:4)
D7: =B3\*D3+B4\*D4-B1

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]