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


11

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

y={0if x=01if x≠0.

나는 이미 정수 변수 있으며 약속합니다 . 정수 선형 프로그래밍 솔버와 함께 사용하기에 적합한 형식으로 위의 제약 조건을 어떻게 표현할 수 있습니까?x,y−100≤엑스≤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. 0≤지1,지2,지≤1
  2. 엑스−엔(1−지1)≤0
  3. −엑스−엔지1≤−1
  4. −엑스−엔(1−지2)≤0
  5. 엑스−엔지2≤−1
  6. 지1+지2−1≤지
  7. 지≤지1
  8. 지≤지2

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


버그가있는 것 같습니다. 나는 당신이 를 의도한다고 가정합니다 . 그러나 x = 100 의 경우 여전히 잘못되었습니다 . 이 경우 y = 1 ( z = 0 ) 을 강제하고 싶지만 방정식 x - N z 와 같이 모든 방정식을 만족시키는 z 1 , z 2에 대한 선택은 없습니다 2 ≤ - 1 은 x < N을 요구합니다 (즉, x ≤ 99 ). 따라서이 ILP는 다음과 같은 경우 잘못된 결과를 제공합니다.지=1−와이엑스=100와이=1지=0지1,지2엑스−엔지2≤−1엑스<엔엑스≤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+엑스≤101티≤101+엑스1−엑스≤101유≤101−엑스티+유−1≤1−와이1−와이≤티1−와이≤유

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

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