Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Solver gibt nicht die optimale Lösung aus

Solver gibt nicht die optimale Lösung aus
08.10.2007 16:33:00
Erdling0815
Hallo zusammen,
ich habe ein einfaches Integer-Modell in Excel gebaut, dass ich mit dem Solver lösen möchte.
Wenn ich jetzt den Solver über das Gesamtproblem (nicht mehr linear) laufen lasse, dann bekomme ich für ein Teilproblem nicht die optimale Lösung. Hier mal mein Problem in Anhang:
https://www.herber.de/bbs/user/46617.xls
Weiß jemand, wo ich Rat finden kann?
Vielen Dank,
Sebastian

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Solver gibt nicht die optimale Lösung aus
09.10.2007 19:44:00
ingUR
Hallo, Sebastian,
m.E. liegt der Fehler in der strikten bedingung $D$32=$D$33, in der Du das Summenprodukt mit einer Zahl 100 vergleichst. Damit wird in der Nähe von lokalen Lösungeswerten sehr schnell der Bereich der Lösungsvariation durch Toleranz "gefangen" (z.B. |99.99999990154 - 100| < Tolerenz und daher Abbruch weitere Lösungsuntersuchungen!).
Wenn die Sprungweiten in den Sätzen bei mit 20 konstant sind (20.40.60.80.100), dann sollte die Bedingung $D$32=$D$33 durch die beiden Bedingungen $D$32>99 und $D$32<101 ersetzt werden, dann sollte die quadratische Schätzung zur Lösung 21.454 € führen.
Ob dieses allerdings immer der Fall sein wird, vermag ich im moment nicht zu sagen, da es sein könnte, dasein lokales Tief nicht mehr zu dem globalen Tief führt. Es kann also sein, das der Ausgangswert infolge K32=0 und SUMMENPRODUKT(..)=0, also durch den Summanden 1.000.000*0,05*0,50 = 50.000, zu einem anderen lokalen Tief führt, als ein Start bei einem anderen Wert. Es hängt von den Werten in der Spalte H ab.
Gruß,
Uwe
ielbereich der Toleranz Deine Aufgabe scheint mir nicht genau Beschrieben zu sein, sowohl für den "Solver" als auch hier in Deinem Beitrag, denn welche Bedingung steht gegen die Lösung:

Anzeige
AW: Solver gibt nicht die optimale Lösung aus
09.10.2007 20:11:00
Erdling0815
Hi Uwe,
danke für die Hilfe! Werde es mir noch einmal anschauen. Wahrscheinlich verstehe ich auch noch nicht ganz die Optionen:
Schätzung lineare bzw. quadratische
Differenz vorwärts bzw. rückwärts
Suchen Newton bzw. Gradient
Kannst Du hier was für mein Problem empfehlen? Ich kann dazu in der Hilfe nichts finden.
Vielen Dank,
Sebastian

Anzeige
AW: Solver gibt nicht die optimale Lösung aus
09.10.2007 22:51:00
ingUR
Hallo, Sebastian,
wenn Du schreibst, «Wahrscheinlich verstehe ich auch noch nicht ganz die Optionen:
Schätzung lineare bzw. quadratische Differenz
vorwärts bzw. rückwärts
Suchen Newton bzw. Gradient»

dann weiß ich natürlich noch nicht so recht, wie weit Du von der fachbezogenen Seite um diese Dinge bescheid weist. Allerdings gibt es sehr wohl in der Hilfe (im Assistent SOLVER oder alternativ "Einstellen der Solver-Optionen" eingeben) einige Hinweise, die auch weiter in die Tiefe führen.
Deine dargestellte Aufgabe ist auch mit der linearen Schätzung lösbar. Eine Lösung für eine Aufgabe mit einr Zielgröße ( y = f(x) ) ist immer auch grafisch dargestellt der Schnnitpunkt zweier Graphen: y-f(x) = 0. Die Aufgabe ist also gleichbedeutend mit dem Suchen nach Nullstellen.
Nun kannst Du Dir bestimmt vorstellen, dass ausgehend von zwei geschätzen Punkten P1 und P2 mit den Werten {x1;y1} und {x2;y2}, die zum Ziewert führen sollen, in einem Koordinatensystem ein Schätzwert mit der linearen Gleichung (Sekantenverfahren) oder aber mit einem quadratischen Polynom bestimmt werden kann:
Damit hast Du nach zwei verschiedenen Methoden (linear und qaudratusch) eine x3-Wert Bestimmt (Schnittpunkt mit der x-Achse, der zu einem neuen y3 Wert führ und damit zu einem Punkt P3 auf dem Graphen.
Mit dem Punkt P2 und P3 wird der Vorgang wiederholt, bis es zu einer nur noch unbedeutenden Veränderung des neuen Wertes für x kommt (=Lösung).
Du siehst also, diese Verfahren haben nichts mit dem Grad der Ausgangsfunktion zu tun, die lediglich im zu untersuchenden Bereich (Bereich der ermittelten x-Werte der Zwischenschritte) definiert sein und mindestens eine Lösung aufweisen muß.
Gleichwohl kann es bei nichtlinearen Funktionen besser sein, quadratische Extrapolationen (Bestimmung des nächsten Punktes P3) zu wählen, anstelle der Sekantenlösungen, insbesondere, wenn man mit bestimmten Startwerten eine Zielbereich einzugrenzen versucht.
Zu den weiteren Punkten ggf. nach Rückfragen mehr.
Für Deine Aufgabe wird wohl in der Regel die Standardeinstellung genügen:
y = a*N + b*cN + SUM[k=1...n](d[k]*binV[k]) mit binV[k] = 0 oder 1.
Da hier, mit den dargestellten Zahlen für d[k] ein überwiegend linearer Zusammenhang besteht, trotz der Potenz cN.
Gruß,
Uwe

Anzeige
AW: Solver gibt nicht die optimale Lösung aus
10.10.2007 09:37:23
Erdling0815
Hi Uwe,
wow! Erst einmal super vielen Dank für Deine Hilfe und Ausführungen. Das ist sicher nicht selbstverständlich. Konnte Deinen Erklärunge sogar folgen..:)
Ich bin aber immer noch nicht ganz glücklich mit meinem Modell. Ich habe nach allen Anpassungen noch einmal den Solver laufen lassen. Und bekomme immer noch nicht die optimale Lösung:
https://www.herber.de/bbs/user/46657.xls
Hier das Problem: Ich kann händisch überpürfen, was die günstigsten Kosten sind für eine gegebene Anzahl an Lieferanten ist (Ich habe mal eine Tabelle in die XLS Datei eingefügt). Wenn ich jetzt die Optimierung laufen lasse, dann bekomme ich in K34 = 2 und in L3:M4 = 2,15. Ich weiß aber, dass es für K34 = 2 auch eine günstigere Kombination gibt, die zu L3:M4 = 2,10 führt. Damit führt mich der Solver nicht zum richtigen Ergebnis.
Solange ich das Problem entdecken kann, ist das ja okay. Wenn das Problem aber komplexer wäre, dann möchte ich ja trotzdem, dass der Solver mich zur optimalen Lösung führt.
Ich habe jetzt mal die Nebenbedinung relaxiert (F34 größergleich 99 und nicht F34=100) und sowohl lineare als auch quadratische Schätzung versucht. Aber ohne Erfolg.
Weißt Du evt., wie ich das Modell so optimieren kann, dass ich auch meine optimale Lösung bekomme?
Vielen Dank,
Sebastian
PS: Ich würde mich gerne mit einem kleinen Dankeschön per Post bei Dir bedanken. Können wir die irgendwie austauschen, ohne dass die dann hier im Forum steht?

Anzeige
AW: Solver gibt nicht die optimale Lösung aus
10.10.2007 17:15:17
ingUR
Hallo, Sebastian,
m.E. ist nicht nur $F$34 > 99 ist als Bedingung einzubauen, sondern auch $F$34 < 101 ist für die Nebenbedingung einer Lösung zu beachten, denn die Lösungsannäherungen reagiert in Deinem Fall empfindlich auf Extrapolationen, die weit über das Ziel schiessen, hier eben über 100.
Hier einmal eine bestimmte Situation zur Lösung eines Zwischenwertes der SOLVER-Rechnung:
Die Kombinationenen von zwei Lieferanten der Lieferanten 1 bis 5 für die Pakete 20:80 (aus Darstellungsgründen wurden die Diagonalwerte für für Liefernant1 u. Lieferant 1, die sich wegen der Nebenbedingung nicht ergeben kann, hier mit ein Mittelwert der benachbarten Werte in das Diagramm eingeführt) ist hier zu sehen (Zelle L3)
 
 ABCDEF
920:801:802:803:804:805:80
101:202,252,402,212,442,15
112:202,102,352,212,442,15
123:202,482,782,502,822,54
134:202,262,562,372,382,31
145:202,122,422,232,462,39
 
Diagramm - Grafik - Excel Tabellen einfach im Web darstellen    Excel Jeanie HTML  3.0    Download  
Im Bild, das nur nicht die für zwei Lieferanten konstanten Summenterme enthält, ist zu erkennen, das zwischen den durch die Nebenbedingungen ausgefilterten Zwischenlösungen (Werte über den Grundflächengitterpunkten) starke Sprünge vorhanden sind, die hier nur EXCEL-Diagrammmöglichkeitenbedingt geradlinig überbrückt sind.
Hier führt neben dem Einbinden der Zusatzbedingung die Option "Automatische Skalierung anwenden" zum Ziel:
Ob jedoch dieses Modell robust ist, so dass bei veränderten Werten auch das bedingte Minimum geliefert wird, kann ich nicht sagen. Es kann also passieren, dass der SOLVER aus irgend einem Tal nicht herausfindet und so das lokale Tief so als globales Tief als ergebnis liefert.
Wenn Du also sichr sein willlst, wie in der "Blackbox" SOLVER mit Deiner Datenstruktur umgegangen wird, dann bleibt wohl nur die Lösung der eingenständigen Nachprogrammiereung in VBA, bei der eben die Kombinationen, ähnliche der Vorgehnensweise oben, alle berechnet werden und das Minimum ausgegeben wird. Wenn das "M€" für "Millionen Euro" stehen sollte, dann ist m.E. dieser Weg in jedem Fall angesagt, denn 150.000 würde wohl keiner in einer "Blackbox" verschwinden lassen wollen. Natürlich kommt es auf die tatsächlich zu berücksichtigenden Kombinationen an, ob das Projekt mit einer VBA-Lösung zu realisieren ist.
Wenn es also keine zielführenden Hinweise mehr gibt (arbeite sonst nicht sehr oft mit den Solver, so dass ich nicht alle Geheimnisse diesbezüglich kenne), dann melde Dich bitte einfach.
Viel Erfolg!
Uwe

Anzeige
AW: Solver gibt nicht die optimale Lösung aus
11.10.2007 09:13:00
Erdling0815
Hallo Uwe,
erst einmal riesen Dank für Deine Antworten. Es geht zwar nicht um Millionen, sondern nur um meinen studentischen Ehrgeiz, die optimale Lösung zu finden, aber trotzdem..=)
Ich glaube, dass ich Deine Argumente jetzt verstehe, nach dem ich mir die Nacht um die Ohren geschlagen haben, aber mit der Robostheit habe ich Sorgen. Ich würde gerne einen vollständigen Vergleich in VBA versuchen, kann nur leider nur gar kein VBA..=)
Kennst Du jemanden, der sich mit VBA und solchen Problemen auskennt und mir helfen würde? Im Rahmen meiner Möglichkeiten würde ich auch nach einer Aufwandsentschädigung schauen..=)
Vielen Dank,
Sebastian

Anzeige
AW: Solver gibt nicht die optimale Lösung aus
11.10.2007 11:56:00
ingUR
Hallo, Sebastian,
eigentlich ist der VBA-Code bestimmt mit rudimentären Kenntnissen zu erstellen, wenn erst einmal die Logik des Algoritmus beschreiben ist.
nL := Anzahl der Lieferanten; l1, l2, l := Laufindex über die anzahl der Lieferanten
nP := Anzahl der Klassen der Paketkontingente eines Lieferantens, p1, p2, p := Laufindex über die Anzahl der Pakete
pA := Anzahl der Pakte in einem Kontingent
pC := Kosten für eine Paketanzahl-Klasse
Basis ist ein Feld A' mit nL x nP, mit den Zeilenindex l und dem Spaltenindex p. Das Element A[l,p] ist entweder 0 oder 1, jenachdem, ob der Lieferant l für die Rubrik p ausgewählt ist oder nicht. In diesem Feld darf es nur eine 1 geben (Summe aller Elemente gleich 0 oder 1).
Dieses zweidimensionale Feld A' wird nL mal hintereinander angeordnet, so dass ein dreidimensionales Feld A[nL; nP; nL] entsteht, mit den Laufindices l1, p und l2. Wieder gilt für jede A-Ebene A[nL; nP, l2], das Diesumme der Elemente dieser Ebene entweder 0 oder 1 sein kann.
Wählt man nun eine Ebene l2 als "Basis" heraus, so ist für jedes Element A[l1, p1, l2] = 1 (die übrigen Elemente sind Null) zu untersuchen, welche Ebenen mit welchen Paketzahlen zusätzlich dazugestellt werden können, ohne dass eine der Bedingungen verletzt wird:
  1. Die Summe der Elemente in einer Ebene A darf 1 nicht übersteigen
  2. die Summe der Pakete SUM(pA) für die ausgewählte Paketantahl-Klasse muß für ein gültiges Ergebnis gleich 100 sein.
Hier muß also die zum Lieferanten l gehörige Paketanzahl, die zum Index p, gehört bekannt sein.
Wenn diese generell einen funktionrllrn Aufbau folgt der zudem für alle Lieferanten gleich ist, kann über den Index p ein entsprechender Funktionszusammenhang genutzt werden.
Andernfalls, und für die weitere Beschreibung genutzt, kann die bewerteten Leistung eines Lieferanten in einen eigenen Datentyp ("Karteikarte" der Datenerfassung) erfaßt werden:
Type Supp pakete(5) as integer preis(5) as double End Type


So kann für jeden Lieferanten eine "Karteikarte" angelegt werden, von der die beiden Kennwerte abglesen werden können.

Dim Supps(10) as Supp


Hier sind also zehn "Karteikarte" angelegt (Array Supps(10) vom Datentyp Supp). Auf jeder sind jeweils fünf Felder für die Paketmengen und die zugehörigen Preis des Liferantenn eingetragen.
Supp(3).pakete(2) = 40
Supp(3).preis(2) = 1,23
Wenn alle Einträge (Zuweisungen) vorgenommen sind, dann kann analog zur Zweisung auch das Auslesen eines "Karteikartenwertes" erfolgen:
pA = Supps(4).pakete(3) liefert z.B. 60 mit einem Preis von pC = Supps(4).preis(3), hier z.B. 1,48.
Nun sind also in einer Variationsuntersuchung für die Laufindexwerte l2 und p2, bei gesetzten Indexwerten l1 und p1, sämtlich Kombinationen nach oben genannter Beschreibung zusammen zustellen sein. ergibt sich dabei für Sum(pA) der Wert 100, wird der Preis dieser Kombination festgestellt und mit dem bisherigen gültigen Minimum verglichen, ggf. wird dieses Minimum ersetzt, wenn ein kleiners gefunden wurde.
Soweit ein erster und unvollständiger Gedankenentwurf, denn es ist klar, dass bei dieser einfachen Vorgehensweise die Anzahl der Variationsuntersuchungen bei einem dreidimendionalen Feld A(5;5;5) infolge der Zusammenstellung enorm ansteigen:


pA = 100                              :=   5 Schritte, für jeden Lieferanten eine Untersuchung
pA =  20 :{80.80.80.80.80}           :=   5 Schritte für L1 und L{2.i.5} mit 20:80
pA =  80 :{20.20.20.20.20}           :=   5 Schritte für L1 und L{2.i.5} mit 80:20
pA =  20 :{20:60.20:60.20.60,20:60} := 12 Schritte für L1 und {L{2.i.5}:L{2.k.5}} i <> k  _
mit 20:{20:60}
usw.


Vielleicht ist Deine studentischer Ergeiz dahin gelengt, die Anzahl der Kombinationen zu ermitteln. Ggf. kannst Du auch den Kontakt, der auf Internetseite dangegeben ist, auf den meine Grafiken hochgeladen sind, dazu nutzen, um einen problemorientierten Gedankenaustausch und Einstieg zum Thema zu starten, denn mit es werden wohl weitere theoretische Erörterungen den Forumsrahmen nicht gerecht, was nicht bedeutet, dass man den gefundenen Algorithmus dann für Verbesserungshinweise hier vorstellt.
Gruß,
Uwe

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Optimale Lösungen mit Excel Solver finden


Schritt-für-Schritt-Anleitung

  1. Modell erstellen: Erstelle ein Modell in Excel, das Deine Optimierungsprobleme abbildet. Achte darauf, dass alle relevanten Daten in einer Tabelle angeordnet sind.

  2. Solver aktivieren: Gehe zu „Datei“ > „Optionen“ > „Add-Ins“. Wähle „Solver-Add-In“ und klicke auf „Gehe zu“. Aktiviere das Kästchen neben „Solver“ und klicke auf „OK“.

  3. Solver konfigurieren:

    • Gehe zu „Daten“ und klicke auf „Solver“.
    • Definiere die Zielzelle, die maximiert, minimiert oder auf einen bestimmten Wert gesetzt werden soll.
    • Füge die veränderbaren Zellen hinzu, die der Solver optimieren soll.
    • Setze alle notwendigen Nebenbedingungen, um die Lösung zu steuern.
  4. Solver ausführen: Klicke auf „Lösen“ und warte auf die Ergebnisse. Überprüfe, ob der Solver eine optimale Lösung gefunden hat.

  5. Ergebnisse analysieren: Überprüfe die Ergebnisse in den Zielzellen und vergleiche sie mit Deinen Erwartungen.


Häufige Fehler und Lösungen

  • Solver funktioniert nicht: Wenn der Solver keine Lösung findet, überprüfe die Nebenbedingungen. Zu strenge Bedingungen können die Lösung einschränken.

  • Lokale vs. globale Lösungen: Manchmal findet der Solver nur lokale Lösungen. Versuche, die Startwerte zu ändern oder die Solver-Optionen auf „GRG nichtlinear“ zu setzen, um bessere Ergebnisse zu erzielen.

  • Zielzellen anpassen: Wenn Du mehrere Zielzellen hast, stelle sicher, dass alle korrekt in den Solver-Optionen eingetragen sind. Der Solver für Excel kann nur eine Zielzelle gleichzeitig bearbeiten.


Alternative Methoden

  • VBA-Programmierung: Wenn der Solver nicht die gewünschten Ergebnisse liefert, könnte eine eigene Programmierung in VBA sinnvoll sein. Dies ermöglicht eine detaillierte Kontrolle über die Berechnungen und kann komplexe Probleme besser lösen.

  • Graphische Methoden: Nutze graphische Darstellungen, um die Beziehungen zwischen Variablen zu verstehen. Dies kann helfen, die besten Startwerte für den Solver zu finden.


Praktische Beispiele

  1. Einfaches Integer-Problem: Stelle ein Modell mit integer-Variablen auf. Setze Bedingungen für die Variablen, um sicherzustellen, dass sie nur ganze Zahlen annehmen.

  2. Kostenoptimierung: Beispielhaft kann ein Modell zur Minimierung der Transportkosten für mehrere Lieferanten erstellt werden. Der Solver wird verwendet, um die besten Kombinationen von Lieferanten zu finden.

Hier ein Beispiel für die Eingabe in den Solver:

Zielzelle: =SUMME(A1:A5) (Minimierung)
Veränderbare Zellen: B1:B5
Nebenbedingungen: B1+B2+B3 <= 100

Tipps für Profis

  • Solver-Optionen: Experimentiere mit verschiedenen Einstellungen im Solver, wie z.B. „Nichtlinear“ oder „Gradientenabstieg“. Je nach Problem kann eine andere Methode besser funktionieren.

  • Datenvalidierung: Verwende die Datenvalidierung, um sicherzustellen, dass die Eingabewerte im gewünschten Bereich bleiben. Dies kann die Robustheit des Modells erhöhen.

  • Dokumentation: Halte Deine Schritte und Ergebnisse fest, um eine spätere Analyse zu erleichtern. Dies hilft auch, den Überblick über verschiedene Lösungsansätze zu behalten.


FAQ: Häufige Fragen

1. Warum findet der Solver keine Lösung? Der Solver könnte an zu strengen oder falschen Nebenbedingungen scheitern. Überprüfe alle Bedingungen und stelle sicher, dass sie realistisch sind.

2. Wie kann ich mehrere Zielzellen optimieren? Verwende die Funktion „Solver für Excel“, um mehrere Zielzellen nacheinander zu optimieren. Alternativ kannst Du auch mehrere Solver-Sitzungen in VBA steuern.

3. Was ist der Unterschied zwischen linearer und nichtlinearer Optimierung? Lineare Optimierung bezieht sich auf Probleme, bei denen die Beziehungen zwischen Variablen linear sind. Nichtlineare Optimierung behandelt Probleme mit nichtlinearen Beziehungen, was oft komplexer ist.

4. Kann ich den Solver auch für große Datensätze verwenden? Ja, der Solver kann auch für große Datensätze verwendet werden, jedoch kann die Rechenzeit stark variieren. Achte darauf, die Daten effizient zu organisieren, um die Leistung zu optimieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige