정수 선형 프로그래밍을 위해 부울로 캐스트


11

정수 선형 프로그램에서 다음 제약 조건을 표현하고 싶습니다.

y={0if x=01if x0.

나는 이미 정수 변수 있으며 약속합니다 . 정수 선형 프로그래밍 솔버와 함께 사용하기에 적합한 형식으로 위의 제약 조건을 어떻게 표현할 수 있습니까?x,y100엑스100

아마도 몇 가지 추가 변수를 도입해야 할 것입니다. 어떤 새로운 변수와 제약을 추가해야합니까? 하나의 새로운 변수로 깨끗하게 할 수 있습니까? 두?

마찬가지로, 제약 조건을 적용하는 방법을 묻습니다.

와이0 만약에 엑스0.

이미 를 암시하는 제약 조건이있는 상황에서 및 .0 y 1|엑스|1000와이1


(내 목표는 https://cs.stackexchange.com/a/12118/755 에서 오류를 수정하는 것입니다 .)


1
무엇을 시도 했습니까? 패턴이 있는지 확인하기 위해 몇 가지 예를 살펴 보셨습니까? 그렇다면, 추측을 시도한 후 증명해 보셨습니까?
Brika

1
응! 내가 볼 당신이 무슨 짓을했는지 , @Brika을. 내가 뭘하려 볼 수있는 좋은 방법입니다 호기심 당신이 경우, 참조 여기 뿐만 아니라 그것이 실제로 잘못된 이유의 설명 . 다음 시도를보고 싶다면 내 답변을 참조하십시오 . 저의 오래된 질문을 읽어 주셔서 감사합니다. 앞으로 개선 될 수 있다면, 어떤 제안이라도 듣고 싶습니다!
DW

아주 좋습니다. ;)
Brika

답변:


4

하나의 추가 이진 변수 δ{0,1} 할 수 있다고 생각합니다 .

100와이엑스100와이
0.001와이100.001δ엑스0.001와이+100.001(1δ)

최신 정보

이것은 엑스연속 변수 라고 가정 합니다 . 우리는 제한하면 엑스정수로 , 다음 두 번째 제약 조건을 단순화 할 수있다 :

와이101δ엑스와이+101(1δ)


1
작은 프로그램으로 철저하게 테스트 하여이 올바른지 확인했습니다. 솔루션 주셔서 감사합니다!
DW

@ErwinKalvelagen, 예를 들어 y = {a : x> 0, b : x <0} 인 경우보다 일반적인 경우에는 이진 변수 델타로 논리를 설명해 주시겠습니까?
Nick

1
@Nick 이진 변수는 'OR'구문을 모델링하는 데 사용됩니다. 귀하의 질문에 대한 답변 은 여기 를 참조 하십시오 .
Erwin Kalvelagen

@ErwinKalvelagen, 훌륭한 대답은, 나는 여기에 내 질문에 대한 당신의 접근 방식을 적용하려고 cs.stackexchange.com/questions/64794/... .
Nick

1
@GonzaloSolera 사실 나는 틀렸다 : 나는 를 연속 변수 라고 가정했다 . 실제로 x 가 정수 값이면 0.001을 1까지 움직일 수 있습니다. 엑스엑스
Erwin Kalvelagen

1

다음은 결코 예쁘지 않지만 작동합니다. 문제의 특정 경우에 , N = 100 이라고하자 . 다음과 같은 제약이 있습니다.0엑스=100

  1. 01,2,1
  2. 엑스(11)0
  3. 엑스11
  4. 엑스(12)0
  5. 엑스21
  6. 1+21
  7. 1
  8. 2

직관은 다음과 같습니다. . 이것은 제약 조건 2와 3으로 인코딩됩니다. 마찬가지로 제약 조건 4와 5는 z 2 = 1을 인코딩합니다.1=1엑스0 . 마지막 3 개의 제약 조건은 z = z 1z 2를 나타 냅니다.2=1엑스0=12


버그가있는 것 같습니다. 나는 당신이 를 의도한다고 가정합니다 . 그러나 x = 100 의 경우 여전히 잘못되었습니다 . 이 경우 y = 1 ( z = 0 ) 을 강제하고 싶지만 방정식 x - N z 와 같이 모든 방정식을 만족시키는 z 1 , z 2에 대한 선택은 없습니다 2- 1x < N을 요구합니다 (즉, x 99 ). 따라서이 ILP는 다음과 같은 경우 잘못된 결과를 제공합니다.=1와이엑스=100와이=1=01,2엑스21엑스<엑스99 : y = 1 을 원하지만 y = 0이 됩니다. 또한 대한 원하는 범위 X 질문에 나와있다 - N X N 아닌 0 X N . 엑스=99와이=1와이=0엑스엑스0엑스
DW

1

다음은 두 개의 임시 변수를 사용하는 솔루션입니다. 하자 (가) 즉 목적으로, 제로 또는 온 변수 정수 즉 t = 1 경우 X 0 , = 1 의 경우 X 0 , 및 Y가 = ¬ ( t U ) . 다음과 같은 제약 조건으로이를 적용 할 수 있습니다.,=1엑스0=1엑스0와이=¬()

0,,와이11+엑스101101+엑스1엑스101101엑스+11와이1와이1와이

이 답변은 안타깝게도 잘못되었습니다. 그것은 구속됩니다 최초의 비 사소한 제약의 첫 부분으로는 문제가 주어 물을 때 X 100 . 펜스 포스트 오류가 재미 있지 않습니까? ( x 99 인 경우 Ditto )엑스99엑스100엑스99
TLW

@TLW, 그것을 잡아 주셔서 감사합니다! 버그를 수정하기 위해 답변을 편집했습니다. 나는 작은 프로그램으로 철저하게 테스트했으며 지금은 정확해야한다고 생각합니다.
DW
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.