Excel Solver : 제약 조건을 0보다 크거나 같게 정의


2

구매 주문을 최적화하기위한 모델을 만들고 있습니다.

주문 수량은 500보다 크거나 0과 같아야합니다.

Solver에서 이러한 제약 조건을 어떻게 정의합니까?

이진 제약 조건을 시도하고 여러 가지 수식을 시도했지만 아무것도 작동하지 않는 것 같습니다.

기본적으로 ORSolver 로 표현할 수 있어야하는데 어떻게해야합니까?

편집 : 다음 링크에서 내가 사용중인 Excel 파일을 볼 수 있습니다 : 여기를 클릭하십시오


링크 된 파일은 곧 삭제되어 로그인해야한다는 경고 플래그를 표시합니다. SU는 지식 기반이며 기본 개념은 사람들이 지속될 Q & A에 기여하고 유사한 문제를 겪는 다른 사람들을 돕는다는 것입니다. 링크 된 파일이 귀하의 질문에 중요한 경우, 필수 요소는 모든 독자가 액세스 할 수있는 영구적 인 방식으로 질문에 통합되어야합니다.
fixer1234

답변:


2

따라서 0이 허용되고 1이 허용되지 않고 499가 허용되지 않으며 501이 허용됩니까? 연속되지 않은 영역처럼 보입니다. 순수한 최적화 문제가 아니라 일종의 조합 문제이기도합니다. 솔버가 이것을 처리 할 수 ​​없습니다.

두 가지 사용 사례를 별도로 분석해야합니다.

  • 금액은 0 (고정 값, 간단한 계산)입니다.
  • 양이 500 이상입니다 (제약 조건> = 500을 사용하여 솔버에서 최적화).

IF 공식을 사용하여이 두 경우를 비교합니다.


편집하다:

Karl이 제안한대로 "이진"및 "정수"제약 조건을 사용하려고했지만 작동하지 않았습니다.

  • 이진 변수 0-1 및 연속 변수> = 500을 만든 다음 IF를 사용하여 연속 변수를 복사하거나 구매 값에 0을 씁니다.
  • 이진 변수 0-1 및 연속 변수> = 500을 만든 다음 구매를 제품으로 계산
  • 정수 변수> = 499를 만든 다음 IF를 사용하여 구매 값으로 499를 0으로 바꿉니다.

모든 경우에 결과는 종종 틀 렸으며 초기 조건에 의존했습니다. 분명히 솔버는 그런 것들을 좋아하지 않습니다.

그런 다음 위의 제안을 6 가지 구매 가치 모두에 적용하고 예를 들어 모든 달의 비용 합계를 최적화하여 독립적으로 최적화하는 방법에 대해 생각했습니다. 그러나 그것들은 독립적이지 않다는 것이 밝혀졌습니다. 개시 재고는 전월에 따라 다르며, 한 달 동안 최적의 구매는 전월에 구매했는지에 따라 다릅니다. 따라서 매월 간단한 IF를 추가 할 수 없습니다.

내가 할 수있는 최선은 다음과 같습니다.

이진 변수 0-1과 연속 변수> = 500을 추가하고 IF를 사용하여 매월 구매를 계산했습니다. 그러나 Solver를 사용하여 연속 변수 만 최적화했습니다. 이진 변수는 매개 변수입니다. 즉, 구매할 월을 선택한 다음 해 찾기를 사용하여 구매 금액을 계산 한 다음 총 비용을 기록합니다.

구매와 비구매의 모든 조합에 대해이 과정을 반복해야합니다. 이 조합의 수는 2 6 = 64입니다. 그러나 실제로 1 월에 아무것도 구매하지 않으면 마이너스 마감 재고가 생길 수 있습니다. 따라서 32 개의 유효한 조합 만 있습니다. 조합 인덱스에서 이진 값을 계산하는 공식을 추가하고 인덱스를 32 회 반복하고, 매번 솔버를 시작하고 각 조합에 대해 "값만"결과를 복사했습니다.

결과적으로 최소 비용은 4 625,00 €이며이 값에 도달하기위한 두 가지 조합이 있습니다.

다음은 Solver 스크린 샷과 함께 Google 문서에 업로드 된 파일입니다.

수작업으로 여러 번 솔버를 시작하는 것은 지루한 일입니다. 매크로를 사용하여 자동화 할 수 있다고 생각합니다.


고마워, 이것은 많은 회사에서 흔히 발생하는 문제입니다. 솔버가 처리 할 수 ​​없다고 믿을 수 없습니다. 공급 업체는 최소 구매 수량을 요청합니다. 그게 전부입니다. 시간이 있다면 위의 편집 된 질문을 살펴보고 사용중인 파일에 대한 링크를 게시하십시오. 감사합니다.
Nuno Nogueira

@NunoNogueira, 내 편집 내용을 참조하십시오. 분명히 정답은 4 625,00 €
고블린 연금술사

고마워요, 이것은 일반적인 문제에 대한 복잡한 해결책입니다. 솔버에 대한 대안을 찾고 있습니다. 어쨌든, 당신은 그것을 올바르게 얻는 것처럼 보였으므로 나는 당신의 대답을 받아들입니다.
Nuno Nogueira

1

목적 함수의 변수 값이 이진수라는 제약 조건을 추가하여 이진 변수를 만듭니다. 목적 함수에서이 변수의 계수는 0이어야합니다. 그런 다음 평소처럼 다음과 같은 제약 조건을 추가합니다.

-500B + X> = 0 (500 미만은 아님)

-MB + X <= 0 (B가 0 일 때 이전 구속 조건 0과 결합 됨)

B = 이항 변수 1

M = 매우 큰 양수 (X보다 클 수 있음)

X = 연속 변수

[편집하다]

다음과 같이하고 싶다는 것을 이해합니다 (시트 파일도 약간 변경했지만 여기서 작업 한 Excel 파일을 공유 할 수 없습니다).

여기에 이미지 설명을 입력하십시오


고맙게도 그것을 설명 할 수는 없지만 논리적 인 설명처럼 들립니다. 위의 질문에서, 사용중인 파일을 추가했습니다. 시간이 있으면 살펴보십시오. 정말 고맙습니다!
Nuno Nogueira

안녕하세요, 도와 주셔서 감사합니다. 이 문제는 아직 해결되지 않았지만 이제는 더 의미가 있습니다. 주문 당 최소 500 개의 요구 사항이 충족되지 않습니다.
Nuno Nogueira

C5 <= C14 * C16 제한은 C5 <= C14 * C16 + C15 여야합니다. 다음과 동일합니다.
Nuno Nogueira

나는 당신이 말한대로 제한을 변경하지 않고 다음과 같은 실행 가능한 결과를 얻었습니다. 비용 1250 500 650 1250 475850 총 비용 4975
Karl

1
@NunoNogueira,이 솔루션이 작동하지 않을 수 있습니다. 나는 명백한 해결책으로 간단한 문제에 대해 몇 가지 실험을했으며 그러한 비선형 공식은 초기 조건에 따라 잘못된 결과를 제공합니다. "이진"제약 조건이있는 추가 변수를 추가하고 곱하거나 "IF"비교를 추가해도 제대로 작동하지 않습니다. 분명히 Solver는 불연속을 좋아하지 않으며 이진 변수와 연속 변수도 혼합합니다.
Goblin Alchemist
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.