Truyền sang boolean, để lập trình tuyến tính số nguyên


11

Tôi muốn thể hiện các ràng buộc sau, trong một chương trình tuyến tính số nguyên:

y={0if x=01if x0.

Tôi đã có các biến số nguyên và tôi đã hứa rằng -100 \ le x \ le 100 . Làm thế nào tôi có thể biểu thị các ràng buộc trên, trong một hình thức phù hợp để sử dụng với một bộ giải lập trình tuyến tính số nguyên?- 100 x 100x,y100x100

Điều này có lẽ sẽ yêu cầu giới thiệu một số biến bổ sung. Những biến và ràng buộc mới nào tôi cần thêm? Nó có thể được thực hiện sạch với một biến mới không? Hai?

Tương tự, đây là yêu cầu làm thế nào để thực thi các ràng buộc

y0 if and only if x0.

trong bối cảnh mà tôi đã có các ràng buộc ngụ ý |x|1000y1 .


(Mục tiêu của tôi là sửa lỗi trong /cs//a/12118/755 .)


1
Bạn đã thử những gì? Bạn đã thử làm việc qua một số ví dụ để xem nếu bạn thấy một mẫu? Nếu có, bạn đã thử đoán và sau đó thử chứng minh điều đó chưa?
Brika

1
Heh! Tôi thấy những gì bạn đã làm ở đó , @Brika. Nếu bạn tò mò muốn xem những gì tôi đã thử, hãy xem ở đây cũng như lời giải thích này về lý do tại sao điều đó thực sự sai . Nếu bạn muốn xem nỗ lực tiếp theo của tôi, hãy xem câu trả lời của tôi . Cảm ơn bạn đã đọc qua các câu hỏi cũ của tôi và nếu chúng có thể được cải thiện cho tương lai, tôi rất muốn nghe bất kỳ đề xuất nào bạn có thể có!
DW

Điều đó rất tốt. ;)
Brika

Câu trả lời:


4

Tôi nghĩ rằng tôi có thể làm điều đó với một biến nhị phân bổ sung :δ{0,1}

100yx100y
0.001y100.001δx0.001y+100.001(1δ)

Cập nhật

Giả định này là một biến liên tục . Nếu chúng tôi giới hạn là giá trị nguyên , thì ràng buộc thứ hai có thể được đơn giản hóa thành: xx y - 101 δ x - y + 101 ( 1 - δ )x

y101δxy+101(1δ)


1
Tôi đã xác minh chính xác điều này bằng cách kiểm tra nó một cách triệt để với một chương trình nhỏ. Cảm ơn bạn cho giải pháp!
DW

@ErwinKalvelagen, bạn có thể vui lòng giải thích logic của bạn với delta biến nhị phân, ví dụ như trường hợp tổng quát hơn, nếu y = {a: x> 0, b: x <0}.
Nick

1
@Nick Biến nhị phân được sử dụng để mô hình hóa cấu trúc 'HOẶC'. Xem ở đây để trả lời cho câu hỏi của bạn.
Erwin Kalvelagen

@ErwinKalvelagen, câu trả lời tuyệt vời, tôi đã thử áp dụng cách tiếp cận của bạn cho câu hỏi của tôi ở đây cs.stackexchange.com/questions/64794/ Lỗi .
Nick

1
@GonzaloSolera Thật ra tôi đã sai: Tôi giả sử là biến liên tục. Thật vậy, khi là số nguyên có giá trị, chúng ta có thể di chuyển 0,001 lên 1 như bạn đề xuất. xxx
Erwin Kalvelagen

1

Những thứ sau đây không đẹp bằng bất kỳ phương tiện nào, nhưng nó hoạt động. Đặt , trong trường hợp cụ thể trong câu hỏi. Sau đó, chúng tôi có các ràng buộc sau đây.0xNN=100

  1. 0z1,z2,z1
  2. xN(1z1)0
  3. xNz11
  4. xN(1z2)0
  5. xNz21
  6. z1+z21z
  7. zz1
  8. zz2

Theo trực giác thì là thế này. . Điều này được mã hóa trong các ràng buộc 2 và 3. Tương tự các ràng buộc 4 và 5 mã hóa . Ba ràng buộc cuối cùng thể hiện .z 2 = 1z1=1x0z = z 1z 2z2=1x0z=z1z2


Điều này dường như có một lỗi. Tôi giả sử bạn có ý định . Tuy nhiên, vẫn sai với : chúng tôi muốn buộc ( ) trong trường hợp này, nhưng không có lựa chọn nào cho thỏa mãn tất cả các phương trình, như phương trình yêu cầu (nghĩa là ). Do đó, ILP này cho kết quả sai khi : chúng tôi muốn , nhưng chúng tôi có . Ngoài phạm vi mong muốn cho được liệt kê trong câu hỏi là , không . x = 100 y = 1 z = 0 z 1 , z 2 x - N z 2- 1 x < N x 99 x = 99 y = 1z=1yx=100y=1z=0z1,z2xNz21x<Nx99x=99y=1y=0xNxN0xN
DW

1

Đây là một giải pháp sử dụng hai biến tạm thời. Đặt là các biến số 0 hoặc một số nguyên, với ý nghĩa dự định là if , if và . Chúng có thể được thi hành với các ràng buộc sau:t,ut=1x0u=1x0y=¬(tu)

0t,u,y11+x101t101+x1x101u101xt+u11y1yt1yu

Câu trả lời này là không chính xác, không may. Nó sẽ ràng buộc bởi phần đầu tiên của ràng buộc không tầm thường đầu tiên khi câu hỏi đưa ra . Không phải là hàng rào lỗi vui? (Ditto cho .)x 100 x - 99x99x100x99
TLW

@TLW, cảm ơn bạn đã nắm bắt điều đó! Tôi đã chỉnh sửa câu trả lời của mình để sửa lỗi. Tôi đã thử nghiệm nó một cách triệt để với một chương trình nhỏ và tôi nghĩ nó nên chính xác ngay bây giờ.
DW
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.