Giới thiệu
Viết một bộ giải cho lập trình tuyến tính số nguyên .
Thử thách
Nhiệm vụ của bạn là viết một bộ giải cho lập trình tuyến tính số nguyên (ILP). Trong ILP, các bất đẳng thức tuyến tính của một tập hợp các ẩn số (tất cả đều là số nguyên) được đưa ra và mục tiêu là tìm mức tối thiểu hoặc tối đa của hàm tuyến tính.
Ví dụ: đối với các bất đẳng thức (ví dụ được lấy từ Lập trình tuyến tính số nguyên hỗn hợp )
4x+2y-15≤0
x+2y- 8≤0
x+ y- 5≤0
- x ≤0
- y ≤0
và hàm mục tiêu 3x+2y
, mức tối đa của hàm mục tiêu phải là 12
( x=2,y=3
), trong khi mức tối thiểu phải là 0
( x=y=0
).
Đầu vào được đưa ra dưới dạng mảng 2d (hoặc bất kỳ tương đương nào theo thông số kỹ thuật tiêu chuẩn), mỗi hàng tương ứng với một bất đẳng thức, ngoại trừ hàng cuối cùng. Các số trong mảng là các hệ số và ≤0
phần luôn bị bỏ qua. Nếu có n
các phần tử trong mỗi hàng, điều đó có nghĩa là có những n-1
ẩn số.
Hàng cuối cùng của mảng tương ứng với hàm tuyến tính. Các hệ số được liệt kê.
Ví dụ, mảng đầu vào cho vấn đề trên là
[[4,2,-15],[1,2,-8],[1,1,-5],[-1,0,0],[0,-1,0],[3,2,0]].
Đầu ra phải là tối thiểu và tối đa, được đưa ra dưới bất kỳ hình thức hợp lý nào.
Đối với vấn đề sau (hai trong số các hạn chế được lấy ra từ vấn đề trên):
[[4,2,-15],[1,2,-8],[1,1,-5],[3,2,0]].
Tối đa vẫn còn 12
, nhưng tối thiểu không tồn tại và hàm mục tiêu có thể có các giá trị âm lớn tùy ý (theo nghĩa giá trị tuyệt đối). Trong trường hợp này, chương trình sẽ xuất ra 12
, theo giá trị sai lệch được quyết định bởi người trả lời. Một trường hợp khác là không có giải pháp nào cả, ví dụ,
[[4,2,-15],[-1,-2,7],[-1,0,3],[0,1,0],[3,2,0]].
Trong trường hợp này, giá trị giả cũng nên được xuất ra. Sẽ rất tốt nếu phân biệt trường hợp "giá trị tối ưu" cho hàm mục tiêu là vô cùng và trường hợp không có giải pháp nào cả, nhưng điều này là không cần thiết.
Đầu vào chỉ chứa các hệ số nguyên cho cả bất đẳng thức và hàm mục tiêu. Tất cả những điều chưa biết cũng là số nguyên. Ma trận hệ số của các bất đẳng thức được đảm bảo có thứ hạng đầy đủ.
Các trường hợp thử nghiệm
Tín dụng cho @KirillL. để tìm một lỗi trong bộ kiểm tra gốc và hiểu sâu hơn về các vấn đề ILP.
Input
Output
[[4,2,-15],[1,2,-8],[1,1,-5],[-1,0,0],[0,-1,0],[3,2,1]]
[1,13]
[[4,2,-15],[1,2,-8],[1,1,-5],[3,2,0]]
[-inf, 12]
[[4,2,-15],[-1,-2,7],[-1,0,3],[0,1,0],[3,2,0]]
[NaN, NaN]
[[-1,-1,-1,-1,-1,8],[1,1,1,1,0,0],[5,5,5,5,6,7]]
[55, inf]
[[-1,-1,-1,-1,-1,8],[1,1,1,1,0,0],[0,0,0,0,0,4]]
[4, 4]
[[4,2,-15],[-1,-2,7],[-1,0,3],[0,1,0],[0,0,4]]
[NaN, NaN]
Thông số kỹ thuật
Không cần phải lo lắng về việc xử lý ngoại lệ.
Đây là code-golf , số byte thấp nhất sẽ thắng.
Số lượng tối đa của ẩn số :
9
. Số lượng bất đẳng thức tối đa :12
.Bạn có thể nhận đầu vào và cung cấp đầu ra thông qua bất kỳ hình thức tiêu chuẩn nào và bạn có thể tự do chọn định dạng.
Như thường lệ, sơ hở mặc định áp dụng ở đây.