2 Stimmen

Excel VBA: Solver scheint nicht "über die Zeit" mit einer Datumsvariablen zu optimieren?

Ich habe ein Optimierungsproblem, das ich mit Solver zu lösen versuche. Eine Entscheidungsvariable ist unter anderem eine Zelle, die ein Datum enthält. Auf der Grundlage einer Zeitreihe sollte Solver den optimalen Zeitpunkt auswählen. Aber während die anderen Entscheidungszellen geändert werden, wird diese Zelle nie geändert! Ich habe sogar versucht, die anderen Entscheidungsvariablen wegzulassen (sie konstant zu halten) - immer noch keine Änderung.

Um Ihnen zu helfen, mein Problem zu verstehen, habe ich eine Excel-Tabelle erstellt und beigefügt (hier: Download-Link ) mit einem vereinfachten Problem, bei dem Solver aus einer Zeitreihe von Aktienkursen das Datum mit dem höchsten Kurs auswählen soll. (Ich bin mir bewusst, dass dieses spezielle Problem leicht mit der MAX-Formel gelöst werden könnte, aber mein wirkliches Optimierungsproblem ist viel komplexer und würde diese Lösung nicht zulassen).

Solver ändert immer noch nichts am ursprünglichen Datumswert - selbst in dieser sehr vereinfachten Einstellung!

Aus mathematischer Sicht könnte das vorliegende Problem als eine (nicht lineare) Stufenfunktion charakterisiert werden, bei der bestimmte Zeitpunkte (auf der x-Achse) verschiedenen Preisen (Stufen, auf der y-Achse) entsprechen.

Gibt es irgendwelche Tricks, um den Solver dazu zu bringen, Zeitwerte (Datum) zu verarbeiten? Wenn Sie Glück haben und die richtigen Solver-Einstellungen finden, um die richtige Lösung zu finden (die der 10. Januar 2009 wäre), würde ich mich freuen, davon zu hören.

Edit: Ich habe herausgefunden, dass nicht-lineare Probleme mit nicht-glatten diskontinuierlichen Funktionen (wie dieses Problem, das im Grunde eine Treppenfunktion ist) im Allgemeinen von jedem (nicht-)linearen Optimierer schwer zu lösen sind. Kann mir jemand, der sich mit der Materie auskennt, dabei helfen, das Problem auf eine lösbare Weise umzuformulieren? Ich habe ein ähnliches Thema gefunden auf Stapelüberlauf mit einem Lösungsvorschlag (siehe erste Antwort), aber ich weiß nicht, wie ich ihn auf mein Problem anwenden soll.

Danke! Steve

1voto

Lance Roberts Punkte 21727

Ich habe Ihre Tabelle in Excel 2010 gelöst, indem ich die Bedingung $C$7 >= $C$13 hinzugefügt und die Evolutionsmethode verwendet habe. Wahrscheinlich können Sie die von Ihnen erwähnte mathematische Methode herausfinden, aber möglicherweise müssen Sie dies in VBA statt im Solver-Dialogfeld tun.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X