강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

stormsix123님의 프로필 이미지
stormsix123

작성한 질문수

VBA Solver 초기값에서 최적해 관련 파라미터 업데이트 안됨

작성

·

281

0

안녕하세요! VBA 수업을 듣고 열심히 개발중인데요..

강의내용중에 나오진 않았지만 물어볼곳이 없어서 여기다가 문의드립니다.

아래와 같이 모듈내에 일부를 발췌했습니다.

 

K1,K2값과 연동된 셀의 값들을 두개의 cdf(누적밀도함수) , pdf(확률밀도함수)로 정의하고 이를 더한 값을

K3 로 지정하여서

K3의 최적해를 구하는것을 vba로 표현하고자합니다.

엑셀상에서 데이터 - 해찾기 - 해법 GRG 비선형으로 구한 값은 최적해를 나름 수렴해서 값을 잘 찾아주는데

하기의 VBA는 K1,K2의 초기값으로 설정된값만 계속 내뱉습니다..

(beta , eta 값을 초기에 설정했음)

 

초기값을 계속 바꾸면 바꾼 초기값에서 더 변화없네요

K3에 대한 최적해가 VBA내에서 뭔가 잘 이뤄지지 않는데 코드를 봐서는 도무지 어느부분이 잘못되었는지 잘모르겠네요... 한번 봐주시면 감사드립니다..

 

 

 beta = 1.3
    eta = 700000

    RO_Ws.Range("K1").Value = eta
    RO_Ws.Range("K2").Value = beta
    
    
    cdf = 0
    
    For m = 1 To lastRow_Sale
        cellValue = Sale_Ws.Cells(m, 1).Value
      
        If cellValue <> 0 Then
        resultValue = WorksheetFunction.Ln(1 - (1 - Exp(-((cellValue / (RO_Ws.Range("K1").Value)) ^ (RO_Ws.Range("K2").Value)))))
        cdf = cdf + resultValue
        End If
        
    Next m
    '~여기까지 누적밀도함수 구함
    
    pdf = 0
    
    For n = 1 To lastRow_RO
        
        cellValue2 = RO_Ws.Cells(n, 3).Value
        If cellValue2 <> 0 Then
        resultValue2 = WorksheetFunction.Ln((RO_Ws.Range("K2").Value) / (RO_Ws.Range("K1").Value) * (cellValue2 / (RO_Ws.Range("K1").Value)) ^ ((RO_Ws.Range("K2").Value) - 1) * Exp(-((cellValue2 / (RO_Ws.Range("K1").Value)) ^ (RO_Ws.Range("K2").Value))))
        pdf = pdf + resultValue2
        End If
        
    Next n
    
   
    RO_Ws.Range("K3").Value = pdf + cdf
    
    'RO_Ws.Range("K1").Value = eta
    'RO_Ws.Range("K2").Value = beta
    'RO_Ws.Range("K3").Value = weibull
    
    SolverReset
    
    ' 조건 설정
    SolverOk SetCell:="$K$3", MaxMinVal:=1, ValueOf:=0, ByChange:="$K$1:$K$2", Engine:=2
    SolverAdd CellRef:="$K$1", Relation:=3, FormulaText:="10000"
    SolverAdd CellRef:="$K$2", Relation:=3, FormulaText:="0"
    
    ' Solver 실행
    SolverSolve UserFinish:=True
    
    eta = RO_Ws.Range("K1").Value
    beta = RO_Ws.Range("K2").Value
    weibull = RO_Ws.Range("K3").Value

답변 1

0

안녕하세요, 인프런 AI 인턴이에요. VBA 관련 질문이시군요.

코드를 보면 K1과 K2 값을 초기화한 이후에 cdf 값을 0으로 설정하고, m을 1부터 lastRow_Sale까지 반복하는 반복문이 있는 것 같습니다. 그러나, 반복문 블록 내에서 cdf 값을 업데이트하거나 K3 값에 대한 최적해를 구하는 로직이 보이지 않습니다.

K3의 최적해를 구하고 싶으신 것 같은데, 현재 코드에는 그런 로직이 포함되어 있지 않아서 K3와 관련된 로직을 추가해야 할 것 같습니다. 예를들어, Solver를 사용하거나 반복문 내에 최적화 알고리즘을 구현하여 K1, K2 값을 변화시키고 그에 따른 K3 값을 계산하는 로직을 추가해야 할 것입니다.

혹시 해당 부분에 대한 구체적인 도움을 받고 싶으시다면, VBA 수업을 진행하신 강사나 인프런 커뮤니티의 다른 VBA 전문가에게 질문해 보시는 것을 추천드립니다. 그럼 좋은 결과 얻을 수 있으실 거에요. 더 도와드릴게 있으면 말씀해주세요.

stormsix123님의 프로필 이미지
stormsix123

작성한 질문수

질문하기