Live-Forum - Die aktuellen Beiträge
Datum
Titel
19.04.2024 12:23:24
19.04.2024 11:45:34
Anzeige
Archiv - Navigation
1844to1848
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
Inhaltsverzeichnis

Solver verwendet falsche Zahlen

Solver verwendet falsche Zahlen
03.09.2021 11:41:54
Patrick
Hallo zusammen,
ich habe ein Problem. Ich habe ein Optimierungsproblem zu lösen und möchte den Solver nutzen. Soweit so gut. Wenn die Daten händisch über Daten Solver eintippe arbeitet der Solver problemlos.
Nun habe ich einen VBA Code geschrieben, da ich diverse Berechnungen durchführen möchte. Nun verändert der Code jedoch die Grenzwerte.
Ihr könnt dies folgend beobachten. Start mit das Makro das auf der Zelle J2 liegt. Dann erhaltet ihr die Fehlermeldung, dass der obere Grenzwert unterhalb des unteren liegt. Jetzt habe ich gesehen, dass für die Zellen K9 und K14 u. a. die Werte im Solver nach Ausführung des Codes nicht den Werten entsprechen, die ich in den jeweiligen Zellen hinterlegt habe.
Ich wäre super froh, wenn mir jemand sagen könnte, was ich falsch gemacht habe.
BG
Pat
https://www.herber.de/bbs/user/147892.xlsm

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Solver verwendet falsche Zahlen
03.09.2021 13:26:29
peterk
Hallo
Ich weiss nicht was Du falsch gemacht hast, aber Deine Werte werden vom Solver "verwurschtelt". Z.B P14/Q14 Solver trägt folgende Werte ein K14>=5 und K14

Sub Optimize()
SolverReset
SolverOptions Precision:=0.0001
SolverOK MaxMinVal:=1 'Max 1 / Min 2 / Target 3
SolverOK SetCell:=Range("L18") 'target
SolverOK Engine:=1 '1 GRG Nonlinear / 2 Simplex LP / 3 EA
SolverOK ByChange:=Range("K8:K17") 'Variable
'Weight 1 = / Integer / 5 Binary
SolverAdd CellRef:=Range("K8"), relation:=1, FormulaText:="$Q$8" 'Equities
SolverAdd CellRef:=Range("K8"), relation:=3, FormulaText:="$P$8"
SolverAdd CellRef:=Range("K9"), relation:=1, FormulaText:="$Q$9" 'Govies
SolverAdd CellRef:=Range("K9"), relation:=3, FormulaText:="$P$9"
SolverAdd CellRef:=Range("K10"), relation:=1, FormulaText:="$Q$10" 'PE
SolverAdd CellRef:=Range("K10"), relation:=3, FormulaText:="$P$10"
SolverAdd CellRef:=Range("K11"), relation:=1, FormulaText:="$Q$11" 'RE
SolverAdd CellRef:=Range("K11"), relation:=3, FormulaText:="$P$11"
SolverAdd CellRef:=Range("K12"), relation:=1, FormulaText:="$Q$12" 'Liquid Alternatives
SolverAdd CellRef:=Range("K12"), relation:=3, FormulaText:="$P$12"
SolverAdd CellRef:=Range("K13"), relation:=1, FormulaText:="$Q$13" 'Commodities
SolverAdd CellRef:=Range("K13"), relation:=3, FormulaText:="$P$13"
SolverAdd CellRef:=Range("K14"), relation:=1, FormulaText:="$Q$14" 'IG
SolverAdd CellRef:=Range("K14"), relation:=3, FormulaText:="$P$14"
SolverAdd CellRef:=Range("K15"), relation:=1, FormulaText:="$Q$15" 'HY/PD&DL
SolverAdd CellRef:=Range("K15"), relation:=3, FormulaText:="$P$15"
SolverAdd CellRef:=Range("K16"), relation:=1, FormulaText:="$Q$16" 'Inflation Linker
SolverAdd CellRef:=Range("K16"), relation:=3, FormulaText:="$P$16"
SolverAdd CellRef:=Range("K17"), relation:=1, FormulaText:="$Q$17" 'Global Infra
SolverAdd CellRef:=Range("K17"), relation:=3, FormulaText:="$P$17"
'Global Restr.
SolverAdd CellRef:=Range("K33"), relation:=2, FormulaText:="$L$33"
SolverAdd CellRef:=Range("K34"), relation:=1, FormulaText:="$L$34"
'SolverAdd CellRef:=Range("K35"), relation:=3, FormulaText:="$L$35" 'only Min Var Opti
SolverAdd CellRef:=Range("K36"), relation:=1, FormulaText:="$L$36"
SolverAdd CellRef:=Range("K37"), relation:=1, FormulaText:="$L$37"
SolverAdd CellRef:=Range("K38"), relation:=1, FormulaText:="$L$38"
SolverAdd CellRef:=Range("K41"), relation:=1, FormulaText:="$L$41"
SolverSolve
'userfinish=true -> MC Simulation
End Sub
Peter

Anzeige
AW: Solver verwendet falsche Zahlen
03.09.2021 13:58:59
peterk
Hallo
Zusatz: Damit der Solver Dezimalzahlen akzeptiert mußt Du ein "=" voranstellen.

z.B. FormulaText:=0.12        -> Solver nimmt 12
FormulaText:="0.12"      -> Solver nimmt 12
FormulaText:="=0.12"     -> Solver nimmt  0,12
Für Dein Makro würde dies bedeuten:
Statt FormulaText:=Range("Q8")  -> FormulaText:= "=" & Range("Q8")
Peter
AW: Solver verwendet falsche Zahlen
07.09.2021 14:37:58
Patrick
Hallo Peter,
ich hatte gestern den ganzen Tag rumprobiert, aber bei mir erfolgt immer die Meldung, ""Solver: Unerwarteter interner Fehler, oder der verfügbare Arbeitsspeicher ist ausgeschöpft.""
Das der Arbeitsspeicher ausgeschöpft ist, ist bestimmt nicht unmöglich, würde mich aber wundern. Mein Code habe ich nach deiner Nachricht folgend angepasst.

Sub Optimize()
SolverReset
SolverOptions Precision:=0.0001
SolverOK MaxMinVal:=1 'Max 1 / Min 2 / Target 3
SolverOK SetCell:=Range("L18") 'target
SolverOK Engine:=1 '1 GRG Nonlinear / 2 Simplex LP / 3 EA
SolverOK ByChange:=Range("L8:L17") 'Variable
'substitute  FormulaText:=Range("?") -> FormulaText:="="&Range("?")
'Weight 1 = / Integer / 5 Binary
SolverAdd CellRef:=Range("K8"), relation:=1, FormulaText:="=" & Range("Q8")   'Equities
SolverAdd CellRef:=Range("K8"), relation:=3, FormulaText:="=" & Range("Q8")
SolverAdd CellRef:=Range("K9"), relation:=1, FormulaText:="=" & Range("Q9") 'Govies
SolverAdd CellRef:=Range("K9"), relation:=3, FormulaText:="=" & Range("Q9")
SolverAdd CellRef:=Range("K10"), relation:=1, FormulaText:="=" & Range("Q10") 'PE
SolverAdd CellRef:=Range("K10"), relation:=3, FormulaText:="=" & Range("Q10")
SolverAdd CellRef:=Range("K11"), relation:=1, FormulaText:="=" & Range("Q11") 'RE
SolverAdd CellRef:=Range("K11"), relation:=3, FormulaText:="=" & Range("Q11")
SolverAdd CellRef:=Range("K12"), relation:=1, FormulaText:="=" & Range("Q12") 'Liquid Alternatives
SolverAdd CellRef:=Range("K12"), relation:=3, FormulaText:="=" & Range("Q12")
SolverAdd CellRef:=Range("K13"), relation:=1, FormulaText:="=" & Range("Q13") 'Commodities
SolverAdd CellRef:=Range("K13"), relation:=3, FormulaText:="=" & Range("Q13")
SolverAdd CellRef:=Range("K14"), relation:=1, FormulaText:="=" & Range("Q14") 'IG
SolverAdd CellRef:=Range("K14"), relation:=3, FormulaText:="=" & Range("Q14")
SolverAdd CellRef:=Range("K15"), relation:=1, FormulaText:="=" & Range("Q15") 'HY/PD&DL
SolverAdd CellRef:=Range("K15"), relation:=3, FormulaText:="=" & Range("Q15")
SolverAdd CellRef:=Range("K16"), relation:=1, FormulaText:="=" & Range("Q16") 'Inflation Linker
SolverAdd CellRef:=Range("K16"), relation:=3, FormulaText:="=" & Range("Q16")
SolverAdd CellRef:=Range("K17"), relation:=1, FormulaText:="=" & Range("Q17") 'Global Infra
SolverAdd CellRef:=Range("K17"), relation:=3, FormulaText:="=" & Range("Q17")
'Global Restr.
SolverAdd CellRef:=Range("K33"), relation:=2, FormulaText:="=" & Range("L33")
SolverAdd CellRef:=Range("K34"), relation:=1, FormulaText:="=" & Range("L34")
'SolverAdd CellRef:=Range("K35"), relation:=3, FormulaText:="=" &Range("L35") 'only Min Var Opti
SolverAdd CellRef:=Range("K36"), relation:=1, FormulaText:="=" & Range("L36")
SolverAdd CellRef:=Range("K37"), relation:=1, FormulaText:="=" & Range("L37")
SolverAdd CellRef:=Range("K38"), relation:=1, FormulaText:="=" & Range("L38")
SolverAdd CellRef:=Range("K41"), relation:=1, FormulaText:="=" & Range("L41")
SolverSolve
'userfinish=true -> MC Simulation
End Sub
Da alle Nebenbedingungen Dezimalzahlen sind, habe ich alle mit dem Zusatz "=" & versehen.
Läuft der Code so bei dir?
Beste Grüße
Anzeige
AW: Solver verwendet falsche Zahlen
07.09.2021 16:19:34
peterk
Hallo
Hier meine/deine Datei bei der es funktioniert
https://www.herber.de/bbs/user/147944.xlsm
Deinen Fehler hab ich nur bekommen, wenn der Solver nicht efolgreich war und ich mir einen Arbeitsbericht genieren wollte.
Peter
AW: Solver verwendet falsche Zahlen
08.09.2021 10:49:05
Patrick
Hallo Peter,
den ersten Bug auf meiner Seite habe ich gefunden. Ich habe deine Datei um die Zelle "N18" erweitert und die Nebenbedingungen bei dir angepasst, die waren um eine Zeile verrutscht. Damit ist es nun mit allen Verknüpfungen identisch mit meiner Datei. Die Nebenbedingungen habe ich extra sehr großzügig gefasst, damit Solver definitiv rechnen kann.
Jetzt kommt auch in deiner Datei die Solver-Fehlermeldung. Würdest du bitte nochmal einen Blick auf die Datei werfen? Meine letzte Frage betrifft den von dir erwähnten Arbeitsbericht. Ist das das Pop-up Fenster in dem mitgeteilt wird, ob Solver erfolgreich oder nicht erfolgreich gewesen ist?
BG und einen schönen Mittwoch
https://www.herber.de/bbs/user/147957.xlsm
Anzeige
AW: Solver verwendet falsche Zahlen
08.09.2021 12:55:39
peterk
Hallo
Ich bekomme keine Fehlermeldung.
Zur Frage: Ja, hier kannst Du Dir Berichte ertellen lassen. Ich bekam die Fehlermeldung nur wenn der Sover nicht erfolgreich war
und ich einen Machbarkeitsbericht wollte.
Peter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige