Я создаю простую модель на Minizinc 2.5.3 (последняя версия) и Gecode 6.3.0, чтобы попытаться организовать производство оружия. При запуске кода появляется следующая ошибка:
Error: Gecode: Float::linear: Number out of limits
Я читал о некоторых ограничениях для переменных с плавающей запятой в Gecode, но я не знаю, связана ли проблема с решателем или с моим кодом (прилагается). Я пробовал изменить все на целочисленные переменные, но требования к ресурсам - это параметры с плавающей запятой. Я также пытался изменить решатель, но ни один из них не работал (нет доступного решателя MIP).
enum WEAPONS; %product
enum RESOURCES; %resources
array [RESOURCES] of float: capacity; %resource constraints
array [WEAPONS] of float: pwr; %profit/objective
array [WEAPONS,RESOURCES] of float: consumption; %consumption of resources for each product unit
array [WEAPONS] of var int: amt; %amount to produce
constraint forall(i in WEAPONS)(amt[i]>=0); %non-negative
constraint forall(r in RESOURCES)(sum(i in WEAPONS)(consumption[i,r]*amt[i])<=capacity[r]); %availability of resources must not be exceeded
solve maximize sum(i in WEAPONS)(pwr[i]*amt[i]);
output ["\(i): \(amt[i])\n" | i in WEAPONS];
Я использую следующий файл данных:
%Product
WEAPONS = {AXE, SWORD, PIKE, SPEAR, CLUB};
%Resoruces
RESOURCES = {IRON, WOOD, BLACKSMITHHR, CARPENTERHR};
%capacity
capacity = [5000, 7500, 4000, 3000];
%consumption: [Product,Resources]
consumption = [| 1.5, 1, 1, 1
| 2, 0, 2, 0
| 1.5, 0.5, 1, 1
| 0.5, 1, 0.9, 1.5
| 0.1, 2.5, 0.1, 2.5 |];
%profit
pwr = [11, 18, 15, 17, 11];