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 ();
>
>

  • Копіювати рядки
  • Копіювати постійне посилання
  • Переглянути git вину
  • Довідка в новому випуску

  • Зверніться до GitHub
  • Ціноутворення
  • API
  • Навчання
  • Блог
  • Про

Зараз ви не можете виконати цю дію.

Ви ввійшли з іншої вкладки чи вікна. Оновіть, щоб оновити сеанс. Ви вийшли з іншої вкладки чи вікна. Оновіть, щоб оновити сеанс.