2016-11-03 1 views
3

간단한 제약 한 고투,하지만 난 내 제약 조건에 맞게 ciui 주위에 내 머리를 얻기 위해 사투를 벌인거야.나는 <code>optim</code> 또는 <code>constrOptim</code>에 몇 가지 간단한 제약으로 대상을 극대화하고자하는 R의 기능은 constrOptim

내 기능은 다음과 같습니다

negexpKPI <- function(alpha,beta,spend){ 

    -sum(alpha*(1-exp(-spend/beta))) 

} 
alphabeta이 벡터를 고정

spend이의 벡터입니다 내가 negexpKPI의 출력을 극대화하기 위해 변화 할 c(sp1,sp2,...,sp6)을 보낸다. 나는 세 가지 방법으로 spend을 제한 할 : 즉, 각 sp1,sp2,...,sp6에 대한

1) 최소 및 최대

0 < sp1 < 10000000 5000 < sp2 < 10000000 을 ...

2) 총 합계 :

sum(spend)=90000000

3) 일부 개별 구성 요소의 합계 :

sum(sp1,sp2)=5000000

어떤 도움을 주시겠습니까? 가능하면 기본 R을 선호하는 다른 방법으로 개방합니다. ?constrOptim에 따르면

+0

모든 벡터의 길이는 6입니다. 단지 '지출'벡터의 구성 요소를 변경하려고합니다. 그래서 우리는 고정되어있는'alpha <- c (a1, a2, ..., a6)','beta <- c (b1, b2, ..., b6)'를 가지고 있고' sp1, sp2, ..., sp6)'함수를 최대화 할 수 있습니다. –

+0

죄송합니다. 완전히 검사하지 않은 샘플 데이터를 사용하고있었습니다. 진정한 최적화는 92 개의 제약 조건을 가진 40 개의 'sp'값을위한 것입니다. 여기서는 전체적으로 복제하면 설명하기가 더 어려워 질 것입니다. 나는 그것을 가능하게 만들기 위해 약간의 여분의 0을 추가했다. –

답변

4

:

The feasible region is defined by ‘ui %*% theta - ci >= 0’. The 
starting value must be in the interior of the feasible region, but 
the minimum may be on the boundary. 

는 그래서 매트릭스 형식으로 제약을 재 작성의 문제이다. 아이덴티티 제약은 단지 2 개의 부등식 제약에 불과하다는 것에주의하십시오.

enter image description here

이제 우리는 R에서 정의 할 수 있습니다

## define by column 
ui = matrix(c(1,-1,0,0,1,-1,1,-1, 
       0,0,1,-1,1,-1,1,-1, 
       0,0,0,0,0,0,1,-1, 
       0,0,0,0,0,0,1,-1, 
       0,0,0,0,0,0,1,-1, 
       0,0,0,0,0,0,1,-1), ncol = 6) 

ci = c(0, -1000000, 5000, -1000000, 5000000, 90000000, -90000000) 

추가 참고

내가 여기서 뭔가 잘못 생각합니다. sp1 + sp2 = 5000000이지만 sp1sp2은 모두 1000000보다 클 수 없습니다. 그래서 실현 가능한 지역이 없습니다! 먼저 질문을 수정하십시오.

죄송합니다. 완전히 검사하지 않은 샘플 데이터를 사용하고있었습니다. 진정한 최적화는 40 sp 값에 대해 92 제약 조건을 사용합니다. 여기에서 전체적으로 복제하면 문제를 더 설명하기 어려울 것입니다. 나는 그것을 가능하게 만들기 위해 약간의 여분의 0을 추가했다.

+1

http://stackoverflow.com/questions/5436630/constrained-optimization-in-r/5438419#5438419의 중복으로 표시를 고려하고 있었지만 그 기능에 대한 문서가 너무 혼란스럽고 다른 좋은 예가 있다고 생각합니다. 그래서 "좋은 생각"입니다. Upvoted 대답하지만 질문하지. –

+1

당신의 대답이 제 의견에 보완 적이라고 생각했습니다. 당신의 외침 그러나 나가 당신 인 경우에 적어도 일 또는 2를 위해 그것을 "속여"남겨 둘 것을 나는 건의한다. "좋은 일"이 될 수있는 더 많은 관심을 얻을 수 있습니다. 나는 당신의 대답을 읽는 것을 좋아합니다. 넌 나 한두 가지를 가르쳐 줬어. –

+1

@ 42 답에 대한 무례 함이 없기 때문에 가장 일반적인 유형의 제약에서 'ui'와 'ci'를 다루는 프로세스를 명확하게 제시한다고 생각합니다. 모든 질문에 대해 속임수로 질문을 표시하되 그 대답은 뚜렷하게 명확하며 다른 곳에서는 유용하다고 생각합니다. 고맙습니다. –

관련 문제