Hakank la master · hakankhakank · GitHub
GitHub găzduiește peste 50 de milioane de dezvoltatori care lucrează împreună pentru a găzdui și a revizui codul, pentru a gestiona proiecte și pentru a construi software împreună.

GitHub este locul în care lumea construiește software
Milioane de dezvoltatori și companii își construiesc, livrează și își întrețin software-ul pe GitHub - cea mai mare și mai avansată platformă de dezvoltare din lume.
hakank/jsr_331/Diet.java /
- Mergeți la fișierul T
- Mergeți la linia L
- Mergeți la definiția R
- Copiați calea
| pachet org.jcp.jsr331.hakan; |
| / ** |
| * |
| * Problema dietei în JSR331. |
| * |
| * Problemă de la http://www.mcs.vuw.ac.nz/courses/OPRE251/2006T1/Labs/lab09.pdf |
| * " " |
| * Dieta mea necesită ca toate alimentele pe care le consum să provină din unul dintre cele patru .basic |
| * grupe alimentare. (tort de ciocolată, înghețată, băutură răcoritoare și cheesecake). |
| * Fiecare felie (mare) de tort de ciocolată costă 50c, |
| * fiecare lingură de înghețată cu ciocolată costă 20c, |
| * fiecare sticlă de cola costă 30c, |
| * și fiecare bucată de tort de brânză cu ananas costă 80c. |
| * |
| * În fiecare zi, trebuie să inger cel puțin 500 de calorii, |
| * 6 oz de ciocolată, |
| * 10 oz de zahăr, |
| * și 8 oz de grăsime. |
| * Conținutul nutrițional pe unitate de fiecare aliment este prezentat în tabelul de mai jos. |
| * |
| * Formulează un model de programare liniar care poate fi folosit pentru a-mi satisface zilnic |
| * necesitate nutrițională la cost minim. |
| * Tipul de calorii Ciocolată Zahăr Grăsime |
| * Mancare (uncii) (uncii) (uncii) |
| * Tort de ciocolată (1 felie) 400 3 2 2 |
| * Înghețată de ciocolată (1 lingură) 200 2 2 4 |
| * Cola (1 sticlă) 150 0 4 1 |
| * Tort de brânză cu ananas (1 bucată) 500 0 4 5 |
| * |
| * " " |
| * |
| * Comparați cu următoarele modele: |
| * - Choco: http://www.hakank.org/choco/Diet.java |
| * - Cometă: 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 |
| * - Tailor/Essence ': http://www.hakank.org/tailor/diet1.eprime |
| * - Zinc: http://www.hakank.org/minizinc/diet1.zinc |
| * |
| * Model de Hakan Kjellerstrand (hakank @ bonetmail.com) |
| * Vezi și http://www.hakank.org/jsr_331/ |
| * |
| * / |
| import javax.constraints. *; |
| clasa publică Dieta |
| Var [] x; |
| int n; // numărul de ingrediente |
| int m; // numărul de tipuri de alimente |
| String [] food = < " Chocolate Cake ", " Chocolate ice cream ", " Cola ", " Pineapple cheesecake " >; |
| String [] ingrediente = < " Calories ", " Chocolate ", " Sugar ", " Fat " >; |
| Problema p = ProblemFactory. newProblem ("Dieta"); |
| public static main main (String [] args) |
| Diet diet = dieta noua (); |
| dietă. defini (); |
| dietă. solve (); |
| > |
| // Definirea problemei |
| public void define () |
| n = 4; // numărul de ingrediente |
| m = 4; // numărul de tipuri de alimente |
| int [] maxVals = < 200000, 2000000, 2000000, 200000 >; |
| int [] pret = < 50, 20, 30, 80 >; // în cenți |
| int [] limite = < 500, 6, 10, 8 >; // minim necesar pentru o dietă |
| // Mâncare: 0 1 2 3 |
| int [] [] matrice =, // calorii |
| < 3, 2, 0, 0 >, // ciocolata |
| < 2, 2, 4, 4 >, // zahar |
| < 2, 4, 1, 5 >>; // gras |
| // definirea variabilelor |
| x = p. variableArray ("x", 0, 10, m); |
| Var [] sume = p. variableArray ("sume", 0, 10000, n); |
| Var cost = p. variabilă („cost”, 0, 100000); |
| // definește și postează constrângeri |
| încerca |
| for (int i = 0; i n; i ++) |
| p. post (p. scalProd (matrice [i], x), "=", sume [i]); |
| p. post (sume [i], "> =", limite [i]); |
| > |
| p. post (p. scalProd (preț, x), "=", cost); |
| p. log (p. getVars ()); |
| > catch (Excepția e) |
| p. jurnal ("Eroare la constrângerile de postare:" + e); |
| Sistem. ieșire (- 1); |
| > |
| > |
| public void solve () |
| // |
| // căutare |
| // |
| Solver solver = p. getSolver (); |
| Strategia SearchStrategy = solver. getSearchStrategy (); |
| // Strategy.setVars (x); |
| // Strategy.setVarSelectorType (VarSelectorType.INPUT_ORDER); |
| // Strategy.setVarSelectorType (VarSelectorType.MIN_VALUE); |
| // Strategy.setVarSelectorType (VarSelectorType.MAX_VALUE); |
| strategie. setVarSelectorType (VarSelectorType. MIN_DOMAIN); |
| // Strategy.setVarSelectorType (VarSelectorType.MIN_DOMAIN_MIN_VALUE); |
| // Strategy.setVarSelectorType (VarSelectorType.MIN_DOMAIN_RANDOM); |
| // Strategy.setVarSelectorType (VarSelectorType.RANDOM); |
| // Strategy.setVarSelectorType (VarSelectorType.MIN_DOMAIN_MAX_DEGREE); |
| // Strategy.setVarSelectorType (VarSelectorType.MIN_DOMAIN_OVER_DEGREE); |
| // Strategy.setVarSelectorType (VarSelectorType.MIN_DOMAIN_OVER_WEIGHTED_DEGREE); |
| // Strategy.setVarSelectorType (VarSelectorType.MAX_WEIGHTED_DEGREE); |
| // Strategy.setVarSelectorType (VarSelectorType.MAX_IMPACT); |
| // Strategy.setVarSelectorType (VarSelectorType.MAX_DEGREE); |
| // Strategy.setVarSelectorType (VarSelectorType.MAX_REGRET); |
| // Strategy.setValueSelectorType (ValueSelectorType.IN_DOMAIN); |
| strategie. setValueSelectorType (ValueSelectorType. MIN); |
| // Strategy.setValueSelectorType (ValueSelectorType.MAX); |
| // Strategy.setValueSelectorType (ValueSelectorType.MIN_MAX_ALTERNATE); |
| // Strategy.setValueSelectorType (ValueSelectorType.MIDDLE); |
| // Strategy.setValueSelectorType (ValueSelectorType.MEDIAN); |
| // Strategy.setValueSelectorType (ValueSelectorType.RANDOM); |
| // Strategy.setValueSelectorType (ValueSelectorType.MIN_IMPACT); |
| // Strategy.setValueSelectorType (ValueSelectorType.CUSTOM); |
| // solver.addSearchStrategy (noua StrategyLogVariables (solver)); |
| // |
| // rezolva |
| // |
| // solver.traceExecution (adevărat); |
| Soluție soluție = rezolvator. findOptimalSolution (Obiectiv. MINIMIZARE, p. getVar („cost”)); |
| if (soluție == nulă) |
| p. log („Fără soluție”); |
| > altfel |
| soluţie. Buturuga (); |
| Sistem. afară. println ("\ n Cost:" + soluție. getValue ("cost")); |
| for (int i = 0; i m; i ++) |
| Sistem. afară. println (food [i] + ":" + soluție. getValue ("x-" + i)); |
| > |
| Sistem. afară. println (); |
| > |
| rezolvator. logStats (); |
| > |
| > |