2017-05-22 1 views
4

오픈 솔버를 사용하여 최적화 문제를 해결하고 있습니다. 문제는 다음과 같습니다.지정된 값 중 어느 하나에 최적 값 설정

주어진 총 비용 제약 조건과 입력 가능 상태로 입력을 최적화한다고 가정합니다. 우리는 투입 원가를 가지고 있으며 원가를 최소화하고자합니다. 또 다른 제약은 최적화 된 입력이 설정 값, 예를 들어 input11, input12, input13 및 input14 중 하나에 속하는 것입니다. 이 개별 입력 범위는 입력에 따라 다릅니다.

  1. 예산,
  2. 입력 용량 각 입력 및
  3. 입력 떨어지는 네 가지 옵션 중 하나에 속하는해야합니다

    그래서 우리는 3 개 제약이있다.

내가 만든 코드의 부분 :

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 

사람이 나에게 문제를 해결하는 데 도움이시겠습니까?

감사합니다.

+1

답을 쓸 시간이 없다,하지만 난 생각 [이 답변] (https://stackoverflow.com/questions/41653105/excel-solver-finding-a-target-sum-from-subset-of-number-set/41658675 # 41658675)는 opensolver를 사용하지 않더라도 달성하려는 목표에 매우 근접합니다. – OldUgly

+0

@OldUgly : 귀하의 제안에 감사드립니다. 나는 당신의 제안에 따라 몇 가지 대답을 발견했다. 그러나 더 많은 테스트가 필요합니다. 또한 오픈 솔버에서 작동하지 않습니다. 최적화 문제가 크고 해결 솔버가 해결할 수 없으므로 열린 솔버에서 실행해야합니다. 하지만 다시 경로를 보여 주셔서 감사합니다! – Beta

+0

이제 이것은 빠른 해킹처럼 들릴지 모르겠지만 VBA에서 솔버를 실행하고 있으므로 for 루프의 네 가지 등가 제약 조건에 대해 개별적으로 실행하고 네 가지 중에서 최상의 답을 선택할 수 있습니다. – RIBH

답변

0

'또는'조건은 일반적으로 우리가 진 변수를 사용할 필요가 의미, 예를 들면 :

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

답변 해 주셔서 감사합니다. 하지만 이건 내가 찾고 있는게 아니야. 추가 제약 조건이 없다고 가정하고, input1에 대한 값 10을 얻습니다. 그러나 최적화 된 입력 1을 9 또는 11 또는 14 또는 16 중 하나를 원합니다. 10은 허용 가능한 값이 아닙니다. 따라서 input1 추가 제한 조건은 [9, 11, 14, 16] 중 하나를 취해야합니다. 희망이 나는 그 질문을 분명히 밝힙니다. – Beta

+0

그것이 무엇입니까. 네가 할 공부가있는 것 같아. –

+0

저는 솔버를 사용하여 최적화 문제를 풀 때 새로운 것입니다. 그래서 쉽게 해결할 수있는 답변을 더 쉽게 찾을 수 있습니다. 당신이 제안한 답변을 코딩하는 데 어려움을 겪고 있습니다. 나는 지금까지 한 일을 업데이트하고있다. 너 더 도움이된다면. 고맙습니다! – Beta