Both sides previous revision
Previous revision
Next revision
|
Previous revision
|
en:dydaktyka:csp:intro [2017/07/17 10:08] 127.0.0.1 external edit |
en:dydaktyka:csp:intro [2020/10/06 21:33] (current) ligeza [Solving the Progblem] |
* [optional] define optimality criteria, e.g. cost function, which has to be minimized; | * [optional] define optimality criteria, e.g. cost function, which has to be minimized; |
* [optional] define the search procedure which will be used to find the solution. | * [optional] define the search procedure which will be used to find the solution. |
| |
| All files required to solve the assignments are available via [[https://gitlab.com/agh-krr/2019-2020/labs|the repository]], so clone it first and follow the Readme instructions. |
| |
===== "Real Life" Example ===== | ===== "Real Life" Example ===== |
- Run MiniZinc IDE | - Run MiniZinc IDE |
| |
===== Solving the Progblem ===== | ===== Solving the Problem ===== |
| |
Modelling problem in MiniZinc consists of four steps: | Modelling problem in MiniZinc consists of four steps: |
The simplest way: ''MiniZincIDE -> Menu -> Minizinc -> Run''. | The simplest way: ''MiniZincIDE -> Menu -> Minizinc -> Run''. |
| |
To receive more than one solution, check the ''Configuration'' tab, check the ''User-defined behavior'' checkbox and select ''Print all solutions''. | To receive more than one solution, check the ''Show configuration editor'' button in the right top corner, check the ''User-defined behavior'' checkbox and select ''Print all solutions''. |
| X===== Tip 50% ===== |
===== Tip 50% ===== | |
| |
The comic strip claims, that we will receive a tip only if we manage to create a general solution. We like tips, so let's get to work! | The comic strip claims, that we will receive a tip only if we manage to create a general solution. We like tips, so let's get to work! |
Then, what is the required price of the order: | Then, what is the required price of the order: |
| |
<code> | <code>int: money_limit = 1505; |
int: money_limit = 1505; | |
</code> | </code> |
| |
=== 5. Fifth Step: Output === | === 5. Fifth Step: Output === |
| |
Again we will use array comprehension. The '++' operator concatenates strings, while the ''show'' function converts number to a string. | Again we will use array comprehension. The double-plus operator concatenates strings, while the ''show'' function converts number to a string. |
| |
<code> | <code> |
| |
| |
| ===== Polishing rough edges ===== |
| |
| Now we should have a basic working model for the problem at hand, but there are still few ways to improve it. |
| Also this is a good moment to play with the MiniZinc compiler --- how to debug and find faults in the model. |
| |
| === Assignments === |
| |
| - Can you think of more succinct way to assert that you can't buy negative number of meals? Currently we use constraints ''>= 0'' - remove them. |
| - We should make sure that our model won't accept illegal parameters. Try special debugging functions to debug your program and assert your requirements. Try functions below, they can prove to be pretty useful in the future: |
| * ''abort("Message")'' |
| * ''trace("Message")'' |
| * ''assert(<test>, "Message")'' |
| * ''trace("Message", <expression>)'' |
| * ''assert(<test>, "Message", <expression>)'' |
| * where: |
| * ''<test>'' is something like ''x < 3'' |
| * ''<expression>'' may be a constraint or anything that returns a value |
| * you can use double-plus and ''show'' to build more complicated messages |
| - Ranges, e.g. ''1..menu_length'' are special cases of ''sets''. Replace all the ranges with named sets to avoid code duplication. The declaration should like this: <code> |
| set of <type>: SetName = start..end; |
| </code> |
| - ''Show configuration editor'' is a very tempting button in the right top corner of the MiniZincIDE. Play with the options: |
| * Check verbose output of the solver. |
| * Try using the ''Gecode-gist''solver. It should display a search tree. Do you understand what does it show? |
| * Experiment :) |