Excel Solver: Definieren Sie die Einschränkung als Null oder größer als

7996
Nuno Nogueira

Ich erstelle ein Modell zur Optimierung von Bestellungen.

Der zu bestellende Betrag muss größer als 500 oder gleich null sein.

Wie definiere ich eine solche Einschränkung in Solver?

Ich habe eine binäre Einschränkung ausprobiert und auch verschiedene Formeln ausprobiert, aber nichts scheint zu funktionieren.

Grundsätzlich muss ich ORin Solver ausdrücken können, wie mache ich das?

BEARBEITEN: Im folgenden Link sehen Sie möglicherweise die von mir verwendete Excel-Datei: Klicken Sie hier

2
Die Datei, zu der Sie einen Link erstellen, gibt eine Warnmeldung aus, die darauf hinweist, dass sie bald gelöscht werden kann und die Anmeldung erforderlich ist. SU ist eine Wissensdatenbank und das grundlegende Konzept besteht darin, dass die Benutzer Q & As beitragen, die dauerhaft sind und anderen mit ähnlichen Problemen helfen. Wenn die verknüpfte Datei für Ihre Frage wichtig ist, sollten die wesentlichen Elemente dauerhaft in die Frage aufgenommen werden, sodass jeder Leser darauf zugreifen kann. fixer1234 vor 8 Jahren 0

2 Antworten auf die Frage

2
Goblin Alchemist

Also ist 0 erlaubt, 1 ist nicht erlaubt, 499 ist nicht erlaubt und 501 ist erlaubt. Sieht aus wie ein nicht zusammenhängender Bereich. Es handelt sich also nicht um ein reines Optimierungsproblem, sondern um eine Art kombinatorisches Problem. Ich fürchte, Solver kann damit nicht fertig werden.

Sie sollten zwei Anwendungsfälle getrennt analysieren:

  • Der Betrag ist Null (fester Wert, einfache Berechnung);
  • Der Betrag ist 500 oder mehr (in Solver unter Verwendung von Einschränkungen> = 500 optimieren);

Vergleichen Sie dann diese beiden Fälle mithilfe einer IF-Formel.


BEARBEITEN:

Ich habe versucht, "binäre" und "ganzzahlige" Beschränkungen zu verwenden, wie Karl vorschlug, aber sie funktionierten nicht.

  • Erstellen Sie eine binäre Variable 0-1 und eine kontinuierliche Variable> = 500, und verwenden Sie dann IF, um entweder die kontinuierliche Variable zu kopieren oder 0 in den Einkaufswert zu schreiben
  • Erstellen Sie eine binäre Variable 0-1 und eine kontinuierliche Variable> = 500, und berechnen Sie dann Einkäufe als ihr Produkt
  • Erstellen Sie eine Integer-Variable> = 499, und verwenden Sie dann IF, um 499 durch 0 für den Einkaufswert zu ersetzen

In allen Fällen war das Ergebnis oft falsch und abhängig von den Ausgangsbedingungen. Anscheinend mag Solver solche Dinge nicht.

Dann dachte ich darüber nach, meinen obigen Vorschlag auf alle sechs Einkaufswerte anzuwenden und diese unabhängig voneinander zu optimieren, beispielsweise durch Optimierung der Kostensumme für alle Monate. Es stellt sich jedoch heraus, dass sie nicht unabhängig sind: Das Eröffnungsinventar hängt vom Vormonat ab und der optimale Kauf für einen Monat hängt davon ab, ob im Vormonat ein Kauf getätigt wurde. Es ist daher nicht möglich, jedem Monat eine einfache IF hinzuzufügen.

Das Beste, was ich tun kann, ist folgendes.

Ich habe eine binäre Variable 0-1 und eine kontinuierliche Variable> = 500 hinzugefügt und die Einkäufe jedes Monats mit IF berechnet. Ich habe aber nur die stetigen Variablen mit Solver optimiert. Die binären Variablen sind ein Parameter. Das heißt, wir wählen die Monate aus, in denen ein Kauf getätigt wird, berechnen dann den Wert dieser Einkäufe mit dem Solver und notieren die resultierenden Gesamtkosten.

Dies sollte für alle Kombinationen von Käufen und Nichtkäufen wiederholt werden. Die Anzahl dieser Kombinationen beträgt 2 6 = 64. Wenn Sie jedoch im Januar nichts kaufen, erhalten Sie ein negatives Schlussinventar, das nicht zulässig ist. Es gibt also nur 32 gültige Kombinationen. Ich habe Formeln hinzugefügt, um die binären Werte aus dem Kombinationsindex zu berechnen, den Index 32-mal durchlaufen, den Solver jedes Mal manuell gestartet und die Ergebnisse für jede Kombination "nur als Werte" kopiert.

Das Ergebnis ist, dass die Mindestkosten 4 625,00 € betragen und es zwei Kombinationen gibt, um diesen Wert zu erreichen.

Hier ist die in Google Docs hochgeladene Datei mit einem Solver-Screenshot.

Solver mehrmals von Hand zu starten, ist langwierig, ich glaube, er kann mit Makros automatisiert werden.

Vielen Dank, dies ist in vielen Unternehmen ein so häufiges Problem. Ich kann nicht glauben, dass der Löser damit nicht umgehen kann: Der Lieferant fordert eine Mindestabnahmemenge an, das ist alles. Wenn Sie Zeit haben, schauen Sie sich bitte meine bearbeitete Frage an, wo ich den Link in die Datei gepostet habe, die ich verwende. Vielen Dank. Nuno Nogueira vor 8 Jahren 0
@NunoNogueira, siehe meine Bearbeitung. Anscheinend ist die richtige Antwort 4 625,00 € Goblin Alchemist vor 8 Jahren 0
Vielen Dank, dies ist eine so komplizierte Lösung für ein allgemeines Problem. Ich suche nach einer Alternative zum Löser. Wie auch immer, Sie schienen es richtig zu machen, also akzeptiere ich Ihre Antwort. Nuno Nogueira vor 8 Jahren 0
1
Karl

Erstellen Sie eine binäre Variable, indem Sie eine Einschränkung hinzufügen, die besagt, dass der Wert der Variablen (in der Zielfunktion) binär ist. Der Koeffizient dieser Variablen in der Zielfunktion muss 0 sein. Dann fügen Sie wie üblich die folgenden Einschränkungen hinzu:

-500B + X> = 0 (niemals unter 500 gehen)

-MB + X <= 0 (kombiniert mit vorherigen Zwangskräften 0, wenn B 0 ist)

B = binäre Variable1

M = sehr große positive Zahl (größer als X kann jemals sein)

X = stetige Variable

[Bearbeiten]

Ich verstehe, dass Sie so etwas tun möchten (ich habe auch einige Änderungen an Ihrer Arbeitsblattdatei vorgenommen, aber ich kann die Excel-Datei, an der ich hier gearbeitet habe, nicht teilen):

Danke, das klingt nach einer logischen Erklärung, obwohl ich sie nicht umsetzen kann. In meiner Frage habe ich die Datei hinzugefügt, die ich verwende. Wenn Sie Zeit haben, können Sie sich das bitte ansehen? Ich danke dir sehr! Nuno Nogueira vor 8 Jahren 0
Hallo, vielen Dank für deine Mühe, mir zu helfen! Dies macht jetzt mehr Sinn, obwohl das Problem noch nicht gelöst ist: Die Mindestanforderung von 500 pro Bestellung ist nicht erfüllt. Nuno Nogueira vor 8 Jahren 0
Ich glaube, ich habe es verstanden: Die Einschränkungen C5 <= C14 * C16 sollten lauten: C5 <= C14 * C16 + C15. Gleiches für das Folgende. Nuno Nogueira vor 8 Jahren 0
Ich habe die folgenden möglichen (und ich glaube, optimalen) Ergebnisse erhalten, ohne die Beschränkungen zu ändern, wie Sie sagen: Eröffnungsinventar 450 50 100 425 50 Käufe 800 0 500 725 0 500 Verkauf 350 400 450 400 375 250 Schlussinventar 450 50 100 425 50 300 Holding Kosten 1250 500 650 1250 475 850 Gesamtkosten 4975 Karl vor 8 Jahren 0
Eigentlich habe ich eine einfachere Lösung gefunden, die von Ihrer "inspiriert" wurde. Schauen Sie doch mal rein: https://docs.google.com/spreadsheets/d/1vGB7cHkiz5TZrcufECA2EpOfo9mFgxn6nF9gdBl-rrE/edit?usp=sharing Nuno Nogueira vor 8 Jahren 0
@NunoNogueira, bitte beachten Sie, dass diese Lösung möglicherweise nicht funktioniert. Ich habe einige Experimente an einem einfachen Problem mit einer offensichtlichen Lösung durchgeführt, und eine solche nichtlineare Formel liefert falsche Ergebnisse, die von den Anfangsbedingungen abhängen. Das Hinzufügen einer zusätzlichen Variablen mit einer "binären" Einschränkung und deren Multiplikation oder das Hinzufügen eines "IF" -Vergleichs funktioniert ebenfalls nicht ordnungsgemäß. Anscheinend mag Solver Diskontinuitäten nicht und mischt auch binäre und kontinuierliche Variablen ... Goblin Alchemist vor 8 Jahren 1
Das ist richtig, ich musste den Lösungslöser reparieren lassen, der mannual fand. Nuno Nogueira vor 8 Jahren 0