1Introducción
2============
3
4MiniZinc es un lenguaje diseñado para especificar problemas de optimización con restricciones y problemas de decisión sobre enteros y números reales.
5
6Un modelo MiniZinc no dicta *cómo* resolver el problema - el compilador de MiniZinc puede traducirlo en diferentes maneras de una forma adecuada para una amplia gama de *solvers*, tales como Programación de Restricciones (CP), Programación Lineal de Múltiple Entero (MIP) o Boolean Satisfactoría (SAT).
7
8El lenguaje MiniZinc permite a los usuarios escribir modelos de una manera que está cerca de una formulación matemática del problema, utilizando la notación familiar como cuantificadores existenciales y universales, sumas sobre conjuntos de índices o conexiones lógicas como implicaciones e instrucciones *if-then-else*. Además, MiniZinc soporta definir predicados y funciones que permiten a los usuarios estructurar sus modelos (similar a procedimientos y funciones en lenguajes de programación regulares).
9
10Los modelos MiniZinc son usualmente paramétricos, es decir, describen una *clase* entera de problemas en lugar de una instancia de problema individual. Por ejemplo, un modelo de un problema de enrutamiento de vehículos podría reutilizarse para generar planes semanales, instanciándolo con las demandas actualizadas de los clientes para la próxima semana.
11
12MiniZinc está diseñado para interactuar fácilmente con diferentes solucionadores de fondo. Esto lo hace tomando un modelo MiniZinc de entrada y un archivo de datos transformandolo a un modelo FlatZinc. Los modelos FlatZinc consisten en declaraciones de variables y definiciones de restricciones, así como una definición de la función objetivo en el caso de que el problema sea un problema de optimización.
13
14La traducción desde MiniZinc a FlatZinc es especializable para los solucionadores de backend individuales, por lo que pueden controlar en qué terminan las restricciones de forma. En particular, MiniZinc permite la especificación de restricciones globales por descomposición.
15
16La traducción de MiniZinc a FlatZinc hace uso de una biblioteca de funciones y definiciones de predicado para el *solver* objetivo en particular, lo que permite al compilador MiniZinc producir FlatZinc especializado que sólo contiene los tipos de variables y restricciones soportados por el destino.
17
18En particular, MiniZinc permite la especificación de *restricciones globales* por *descomposición*. Además, las *anotaciones* del modelo permiten al usuario ajustar el comportamiento del *solver*, independientemente del significado declarativo del modelo.
19
20
21Estructura
22----------
23
24Esta documentación consta de tres partes.
25:ref:`La primera parte <part-reference>` incluye la introducción y luego describe cómo descargar e instalar MiniZinc. Cómo realizar sus primeros pasos con el IDE de MiniZinc y las herramientas de línea de comandos.
26
27:ref:`La segunda parte <part-tutorial>` es una introducción al modelado con MiniZinc, desde la sintaxis básica y técnicas de modelado simples, hasta temas más avanzados. También explica cómo MiniZinc se compila a FlatZinc.
28
29:ref:`La tercera parte <part-reference>` contiene la documentación de referencia para MiniZinc. Incluyendo una definición del lenguaje MiniZinc, documentación sobre cómo interconectar un *solver* a FlatZinc, y una lista de todos los predicados y funciones en la biblioteca estándar de MiniZinc.
30
31
32
33Cómo leer esto
34--------------
35
36Si eres nuevo en MiniZinc, sigue las instrucciones de instalación, la introducción al IDE y luego explora el tutorial. La mayoría del código de ejemplo se puede descargar, pero a veces es más útil escribir por ti mismo para obtener el idioma en su memoria muscular!.
37Si necesita ayuda, visite el sitio web de MiniZinc en http://www.minizinc.org donde encontrará un foro de discusión.
38
39.. only:: builder_html
40
41  Algunos de los ejemplos de código se muestran en cuadros como el siguiente. Si un cuadro de código tiene un encabezado, normalmente también contiene un vínculo al código fuente (puede hacer clic en el nombre del archivo).
42
43.. only:: builder_latex
44
45  Algunos de los ejemplos de código se muestran en cuadros como el siguiente. Si un cuadro de código tiene un encabezado, suele enumerar el nombre de un archivo que se puede descargar desde http://minizinc.org/tutorial/examples.
46
47.. literalinclude:: examples/dummy_es.mzn
48  :language: minizinc
49  :name: ex-ex
50  :caption: Un código de ejemplo (:download:`dummy_es.mzn <examples/dummy_es.mzn>`)
51
52A lo largo de la documentación, algunos conceptos se definen un poco más formalmente en secciones especiales como ésta.
53
54.. defblock:: Más detalles
55
56  Estas secciones se pueden omitir si sólo desea trabajar con el tutorial por primera vez, pero contienen información importante para cualquier usuario de MiniZinc!
57
58Finalmente, si encuentra algún error en esta documentación, infórmelo a través de nuestro GitHub issue tracker.
59