Hakank у майстра · hakankhakank · GitHub
У GitHub проживає понад 50 мільйонів розробників, які спільно працюють над розміщенням та переглядом коду, управління проектами та спільним створенням програмного забезпечення.

GitHub - це місце, де світ розробляє програмне забезпечення
Мільйони розробників та компаній створюють, постачають та підтримують своє програмне забезпечення на GitHub - найбільшій та найдосконалішій платформі розробки у світі.
hakank/jsr_331/Diet.java /
- Перейдіть до файлу T
- Перейдіть до рядка L
- Перейдіть до визначення R
- Копіювати шлях
| пакет org.jcp.jsr331.hakan; |
| / ** |
| * |
| * Проблема дієти в JSR331. |
| * |
| * Проблема з http://www.mcs.vuw.ac.nz/courses/OPRE251/2006T1/Labs/lab09.pdf |
| * " " |
| * Мій раціон вимагає, щоб вся їжа, яку я вживаю, надходила з одного з чотирьох основних |
| * групи продуктів. (шоколадний торт, морозиво, безалкогольний напій та чізкейк). |
| * Кожен (великий) шматочок шоколадного торта коштує 50c, |
| * кожна совка шоколадного морозива коштує 20c, |
| * кожна пляшка кола коштує 30c, |
| * і кожен шматок ананасового чізкейка коштує 80c. |
| * |
| * Щодня я повинен вживати щонайменше 500 калорій, |
| * 6 унцій шоколаду, |
| * 10 унцій цукру, |
| * і 8 унцій жиру. |
| * Харчовий вміст на одиницю кожного продукту наведено в таблиці нижче. |
| * |
| * Сформулюйте модель лінійного програмування, яка може бути використана для задоволення мого повсякденного життя |
| * харчові потреби при мінімальних витратах. |
| * Тип калорій Шоколад Цукор Жир |
| * Їжа (унції) (унції) (унції) |
| * Шоколадний торт (1 шматочок) 400 3 2 2 |
| * Шоколадне морозиво (1 совок) 200 2 2 4 |
| * Кола (1 пляшка) 150 0 4 1 |
| * Ананасовий чізкейк (1 штука) 500 0 4 5 |
| * |
| * " " |
| * |
| * Порівняйте з наступними моделями: |
| * - Choco: http://www.hakank.org/choco/Diet.java |
| * - Комета: http://www.hakank.org/comet/diet.co |
| * - ECLiPSE: http://www.hakank.org/eclipse/diet.ecl |
| * - Gecode/R: http://www.hakank.org/gecode_r/diet.rb |
| * - Gecode: http://www.hakank.org/gecode/diet.cpp |
| * - Google CP Solver: http://www.hakank.org/google_or_tools/diet1.py |
| * - JaCoP: http://www.hakank.org/JaCoP/Diet.java |
| * - MiniZinc: http://www.hakank.org/minizinc/diet1.mzn |
| * - SICStus: http://www.hakank.org/sicstus/diet1.pl |
| * - Кравець/Сутність ': http://www.hakank.org/tailor/diet1.eprime |
| * - Цинк: http://www.hakank.org/minizinc/diet1.zinc |
| * |
| * Модель Хакана К'єллерстранда (hakank @ bonetmail.com) |
| * Див. Також http://www.hakank.org/jsr_331/ |
| * |
| * / |
| імпортувати javax.constraints. *; |
| громадський клас Дієта |
| Var [] x; |
| int n; // кількість інгредієнтів |
| int m; // кількість видів їжі |
| Рядок [] їжа = < " Chocolate Cake ", " Chocolate ice cream ", " Cola ", " Pineapple cheesecake " >; |
| Рядок [] інгредієнти = < " Calories ", " Chocolate ", " Sugar ", " Fat " >; |
| Проблема p = ProblemFactory. newProblem ("Дієта"); |
| public static void main (String [] args) |
| Дієтична дієта = нова дієта (); |
| дієта. define (); |
| дієта. вирішити (); |
| > |
| // Визначення проблеми |
| public void define () |
| n = 4; // кількість інгредієнтів |
| m = 4; // кількість видів їжі |
| int [] maxVals = < 200000, 2000000, 2000000, 200000 >; |
| int [] ціна = < 50, 20, 30, 80 >; // у копійках |
| int [] межі = < 500, 6, 10, 8 >; // мінімум, необхідний для дієти |
| // Їжа: 0 1 2 3 |
| int [] [] матриця =, // калорій |
| < 3, 2, 0, 0 >, // шоколад |
| < 2, 2, 4, 4 >, // цукор |
| < 2, 4, 1, 5 >>; // жирний |
| // визначаємо змінні |
| x = p. variableArray ("x", 0, 10, m); |
| Var [] суми = p. variableArray ("суми", 0, 10000, n); |
| Вартість змін = р. змінна ("вартість", 0, 100000); |
| // визначення та розміщення обмежень |
| спробуй |
| для (int i = 0; i n; i ++) |
| стор. повідомлення (стор. scalProd (матриця [i], x), "=", суми [i]); |
| стор. повідомлення (суми [i], "> =", ліміти [i]); |
| > |
| стор. пост (стор. scalProd (ціна, х), "=", вартість); |
| стор. журнал (стор. getVars ()); |
| > catch (виняток e) |
| стор. журнал ("Помилка розміщення обмежень:" + e); |
| Система. вихід (- 1); |
| > |
| > |
| вирішення публічної порожнечі () |
| // |
| // пошук |
| // |
| Розв'язувач розв'язувач = p. getSolver (); |
| Стратегія пошукуStrategy = вирішувач. getSearchStrategy (); |
| // стратегія.setVars (x); |
| // стратегія.setVarSelectorType (VarSelectorType.INPUT_ORDER); |
| // стратегія.setVarSelectorType (VarSelectorType.MIN_VALUE); |
| // стратегія.setVarSelectorType (VarSelectorType.MAX_VALUE); |
| стратегія. setVarSelectorType (VarSelectorType. MIN_DOMAIN); |
| // стратегія.setVarSelectorType (VarSelectorType.MIN_DOMAIN_MIN_VALUE); |
| // стратегія.setVarSelectorType (VarSelectorType.MIN_DOMAIN_RANDOM); |
| // стратегія.setVarSelectorType (VarSelectorType.RANDOM); |
| // стратегія.setVarSelectorType (VarSelectorType.MIN_DOMAIN_MAX_DEGREE); |
| // стратегія.setVarSelectorType (VarSelectorType.MIN_DOMAIN_OVER_DEGREE); |
| // стратегія.setVarSelectorType (VarSelectorType.MIN_DOMAIN_OVER_WEIGHTED_DEGREE); |
| // стратегія.setVarSelectorType (VarSelectorType.MAX_WEIGHTED_DEGREE); |
| // стратегія.setVarSelectorType (VarSelectorType.MAX_IMPACT); |
| // стратегія.setVarSelectorType (VarSelectorType.MAX_DEGREE); |
| // стратегія.setVarSelectorType (VarSelectorType.MAX_REGRET); |
| // стратегія.setValueSelectorType (ValueSelectorType.IN_DOMAIN); |
| стратегія. setValueSelectorType (ValueSelectorType. MIN); |
| // стратегія.setValueSelectorType (ValueSelectorType.MAX); |
| // стратегія.setValueSelectorType (ValueSelectorType.MIN_MAX_ALTERNATE); |
| // стратегія.setValueSelectorType (ValueSelectorType.MIDDLE); |
| // стратегія.setValueSelectorType (ValueSelectorType.MEDIAN); |
| // стратегія.setValueSelectorType (ValueSelectorType.RANDOM); |
| // стратегія.setValueSelectorType (ValueSelectorType.MIN_IMPACT); |
| // стратегія.setValueSelectorType (ValueSelectorType.CUSTOM); |
| // solver.addSearchStrategy (новий StrategyLogVariables (вирішувач)); |
| // |
| // вирішити |
| // |
| // solver.traceExecution (істина); |
| Рішення рішення = розв'язувач. findOptimalSolution (Objective. MINIMIZE, p. getVar ("cost")); |
| якщо (рішення == нуль) |
| стор. журнал ("Немає рішення"); |
| > ще |
| рішення. log (); |
| Система. назовні println ("\ n Вартість:" + рішення. getValue ("вартість")); |
| для (int i = 0; i m; i ++) |
| Система. назовні println (food [i] + ":" + рішення. getValue ("x-" + i)); |
| > |
| Система. назовні println (); |
| > |
| вирішувач. logStats (); |
| > |
| > |