Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
912to916
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
912to916
912to916
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

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

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

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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige