2017-01-07 11 views
0

저는 17 개의 방정식, 총 변수의 최소 합을 계산할 수있는 506 개의 변수로 구성된 선형 시스템을 가지고 있습니다. 이것은 잘 작동하지만, 지금까지는 해결책이 19 가지 변수를 조합 한 결과입니다.opensolver에서 선택된 변수를 제한하는 것

결국 결국 최적의 변수가 무엇인지 미리 알지 못하고 선택한 변수의 양을 10 개로 제한하고 싶습니다. (솔버가 나와 내포하는 비율과 비율).

값이 0보다 커지면 (즉, 변수가 선택되었음을 의미하는) 부 울린 = 1을 설정할 수 있고, 변수가 최적의 솔루션으로 선택되지 않은 경우 0을 설정할 수 있습니다.

그리고 나서 부울 값의 합은 최대 10입니다.

그러나 이것은 약간 정교하게 보입니다. 나는 서브 세트가있는 큰 세트를 해결하는 것이 일반적인 문제라고 생각하기 때문에 opensolver에 내장 옵션이 있는지 궁금합니다. 내 정교한 방법은 크게 성능이 저하 어떻게

  1. :

    그래서 사람에 대한 제안이 있습니까? (* 나는 아직 오픈 솔버 알고리즘에 대한 내재적 이해력을 가지고 있지 않다.)

  2. 오픈 솔버 옵션 내에서의 제안은 내 최대 욕구에 대한 설명이다. 10 개의 솔루션 변수? I는 열 (18 명) 엔트리를 세 개의 데이터 목록이

    : 아래에 제공된 정보에 기초

는 I 우선 문제의 크기를 축소

W7:W23,AC7:AD23

하는 수동 (함께 : W28 = 6000, AC28=600,W29 = 1,AC29 =1)는 선형 조합에서 같음/초과 목표 목록 :

그래서 내가 (원래 모두 opensolver 같이 해석 엑셀)

솔버에 제약 W28,AC28:AD28 = integer을 추가 W28:W29, AC28:AD29 에 descion 변수를 넣어했다 그리고 난 해결사의 제약 W29,AC29:AD29 = Boolean을 추가 (모두 원래의 엑셀 솔버이어서

) opensolver 같이 I는 정수 * 부울의 승산 = I는 시도 선택된 변수 NR을 제한하기 위해 (W7:W23 etc)

에서 상기리스트의 실제 배율, 또한이 설명 된 제약 조건에 따라 세포를로 제한(효과적으로 11 이하로 설정된 부울의 양을 줄이거 나 그렇게 생각했지만 부울은 해결자가 부울로 평가하지 않음).

이 새로운 곱한 목록

W34:W50,AC34:AD50에 배치되고, 합계가에 위치하고 있습니다 : EGY34:EGY50는 따라서 최종 점검이 같은 제약 조건으로 추가됩니다

EGY34:EGY50 =>EGM34:EGM50

그리고 어떻게 선형에 대한 질문이 있었다 솔버가 이러한 제약 조건을 평가하면 수행합니까?

a. EGY34:EGY50 must be larger or equal than/to EGM34:EGM50

또는

B의 합을 생각하십시오. 그것은 생각합니까 :.. 모든 행 X EGYx must be larger or equal than/to EGMx

지금까지 내가 언급 한 B는 "그러나 나는 확인하고 싶은

을하지만 내 주요 질문에 대한 우려 :

진화를 사용한 후 알고리즘은 부울로 지정된 desicion 변수에 대해 0.99994 값을 사용하는 방법/이유는 무엇입니까?

+3

죄송합니다. 이것을 종종 "카디널리티 제약"이라고합니다. 0이 아닌 솔루션 값을 계산하기 위해 추가 바이너리 변수를 사용할 필요가 없습니다. –

+1

그리고 네, 해결 시간이 느려질 것으로 예상됩니다. - 아마도 아주 많이 : ( –

+0

@ErwinKalvelagen 감사합니다! 나는 문제가 발생했을 때마다 비틀 거릴 때마다 실제적으로 그것의 이름뿐만 아니라 실제로 그것을 다루는 방법. 나는 카디널리티 제약을 찾아 내 문제와 어떻게 관련되는지 이해하려고 노력한다. –

답변

2

실제로 이진 변수의 도입은 이러한 제약 조건을 구현하는 표준 방법입니다. 문제는 f ROM은 integer programming problem (특히 혼합 정수 선형 프로그래밍 문제)에 대한 선형 프로그래밍 문제입니다. 이러한 문제에 대한 표준 접근법은 branch and bound algorithm입니다. 이것은 Excel의 내장 솔버가 사용하는 것처럼 보이기 때문에 사용하고있는 솔버가 맞는지 잘 모르겠습니다. 가장 큰 경우 (테두리가 많은 경우) 크기가 문제가 있어도 상당히 빠르게 실행됩니다. 최악의 경우 문제의 경우 단방향 알고리즘 C(506,10) = 2.8 x 10^20 번 (가능한 10 개의 의사 결정 변수 각각에 대해 한 번)을 실행하여 얻는 것보다 조금 나을 수 있습니다. 즉, 실행 불가능할 수도 있습니다. 정수 프로그래밍은 NP 하드로 알려져 있습니다.

정확한 솔루션을 실행할 수없는 경우 항상 진화 적 접근 방식과 같은 휴리스틱 알고리즘을 사용할 수 있습니다.

+0

제안 해 주셔서 감사합니다. 문제의 크기를 대폭 줄인 기존의 Excel solver의 진화 알고리즘을 통해 문제를 해결하고 문제점을 정확히 파악하고 문제가 올바르게 설정되었는지 확인했습니다. 하지만 나는 부울이 부울 값으로 평가되지 않는다는 것을 알아 냈습니다. 솔버가 내가 상상하는 것과 다른 기능을한다고 생각하기 때문에 솔버가 사용할 수없는 경계 조건/제약 조건을 설정하게됩니다. 문제 유형을 읽고 문제 해결 자 관계에 다시 적용하려고합니다. –