2017-05-22 5 views
4

Ich benutze Open Solver, um ein Optimierungsproblem zu lösen. Das Problem ist wie folgt:Einstellung des optimalen Wertes für den angegebenen Wert

Angenommen, ich optimiere Eingabe mit gegebenen Gesamtkostenbeschränkung und Eingabeverfügbarkeit. Wir haben Inputkosten und möchten die Kosten minimieren. Die andere Einschränkung ist, dass der optimierte Eingang in irgendeinen der eingestellten Werte fällt, zB input11, input12, input13 und input14. Dieser diskrete Eingangsbereich variiert zwischen den Eingängen.

So haben wir drei Einschränkungen:

  1. Budget,
  2. Eingangskapazität für jeden Ein- und
  3. Eingänge sollten innerhalb einer der fallenden vier Optionen fallen.

Der Teil des Codes I erstellt:

Sub TestOpensolver() 

Dim TestSheet As Worksheet 
Set TestSheet = Worksheets("Optimized_Results") 

    OpenSolver.ResetModel Sheet:=TestSheet 

    'Objective Definition 
    OpenSolver.SetObjectiveFunctionCell TestSheet.Range("AC3"), Sheet:=TestSheet 
    OpenSolver.SetObjectiveSense MinimiseObjective, Sheet:=TestSheet 

    'Variables Definition 
    OpenSolver.SetDecisionVariables TestSheet.Range("AK3:AK8"), Sheet:=TestSheet 
    OpenSolver.SetDecisionVariables TestSheet.Range("AQ3:AR8"), Sheet:=TestSheet 

    ' Constraints  

    OpenSolver.AddConstraint TestSheet.Range("AK3:AK8"), RelationLE, TestSheet.Range("W3:W8"), Sheet:=TestSheet 
    OpenSolver.AddConstraint TestSheet.Range("AK3:AK8"), RelationGE, TestSheet.Range("X3:X8"), Sheet:=TestSheet 


    OpenSolver.AddConstraint TestSheet.Range("AS3:AS8"), RelationLE, TestSheet.Range("AT3:AT8"), Sheet:=TestSheet 


    OpenSolver.RunOpenSolver , False 



End Sub 

Kann mir jemand bitte helfen, das Problem zu lösen?

Vielen Dank!

+1

Keine Zeit eine Antwort zu schreiben, aber ich denke, [diese Antwort] (https://stackoverflow.com/questions/41653105/excel-solver-finding-a-target-sum-from-subset-of-number-set/41658675 # 41658675) liegt sehr nahe bei dem, was Sie erreichen möchten, obwohl es keinen opensolver verwendet. – OldUgly

+0

@OldUgly: Danke für Ihren Vorschlag. Ich habe eine Antwort auf Ihren Vorschlag gefunden. Brauche aber noch mehr Tests. Außerdem funktioniert es nicht in Open Solver. Ich muss es auf Open Solver ausführen, da das Optimierungsproblem groß ist und Excel Solver es nicht lösen kann. Aber nochmals vielen Dank, um mir den Weg zu zeigen! – Beta

+0

Nun klingt das vielleicht nach einem schnellen Hack, aber da Sie den Solver von VBA aus ausführen, können Sie ihn für die vier verschiedenen Gleichheitsbedingungen in einer for-Schleife separat ausführen und die beste Antwort aus den vier auswählen. – RIBH

Antwort

0

‚oder‘ Bedingungen, die typischerweise meinen wir Binärgrößen verwenden müssen, zB:

input1 = input11*y11 + input12*y12 + input13*y13 + input14*y14 
y11+y12+y13+y14 <= 1 
y11,y12,y13,y14 binary variables 
+0

Danke für Ihre Antwort. Aber das suche ich nicht. Angenommen, ohne die zusätzliche Einschränkung würde ich den Wert 10 für Eingabe1 erhalten. Aber ich will, dass der optimierte Eingang1 entweder 9 oder 11 oder 14 oder 16 ist. 10 ist kein akzeptabler Wert. Damit Input1 extra Contraint sein muss, sollte jeder von [9, 11, 14, 16] nehmen. Hoffe ich klärt die Frage auf. – Beta

+0

Das ist, was ist. Ich schätze, du musst etwas lernen. –

+0

Ich bin neu im Lösen von Optimierung mit Solver. Also noch leichtere Antworten finden ich schwer zu lösen. Es fällt mir schwer, die Antwort zu programmieren, die Sie vorgeschlagen haben. Ich aktualisiere, was ich bisher gemacht habe. Wenn Sie weiter helfen können. Vielen Dank! – Beta

Verwandte Themen