100 likes | 235 Views
Gecode . generic constraint development environment . Pablo Martínez Bernardo. Velocidad, MiniZinc Challenge. Medalla de oro en todas las categorías los años 2009, 2010, 2011 y 2012 En algunas categorías en 2008. Licencia MIT. Licencia sencilla:
E N D
Gecode generic constraint development environment Pablo Martínez Bernardo
Velocidad, MiniZinc Challenge Medalla de oro en todas las categorías los años 2009, 2010, 2011 y 2012 En algunas categorías en 2008
Licencia MIT Licencia sencilla: • Los autores no son responsables de ningún problema causado por el funcionamiento del software • Libre uso, modificación, venta, copia y publicación, siempre y cuando el software derivado sea publicado bajo una licencia idéntica
Características Primera versión en 2005 Extensa documentación Librería disponible para C++ Ejecutable en hilos Exporta a FlatZinc Resolutores para enteros, reales y booleanos, así como otros específicos a problemas concretos
Integración con C++ Multiplataforma Aprovechamiento de bucles, objetos… Posterior manejo sencillo de los datos obtenidos Contra: Sintaxis complicada en comparación con lenguajes dedicados como MiniZinc
Estructura de un programa //includes class problema : public Space{ protected: //Variables de decisión public: //Constructores //Constraints //Método copy //Métodos auxiliares };
N-Reinas #include <gecode\int.hh> #include <gecode\search.hh> #include <gecode\driver.hh> using namespace Gecode; #include <iostream> using namespace std; class nReinas : public Space { protected: IntVarArray tablero; public: //Constructores //Método copy //Métodos auxiliares };
N-Reinas nReinas(const int tam) { tablero = IntVarArray(*this, tam, 0, tam-1); for (int i = 0; i < tam; i++){ for (int j = i + 1; j < tam; j++) { rel(*this, tablero[i] != tablero[j]); rel(*this, tablero[i]+i != tablero[j]+j); rel(*this, tablero[i]-i != tablero[j]-j); } } branch(*this, tablero, INT_VAR_SIZE_MIN, INT_VAL_MIN); }
N-Reinas nReinas(bool share, nReinas& s) : Space(share, s) { tablero.update(*this, share, s.tablero); } virtual Space* copy(bool share) { return new nReinas(share,*this); } void print() const { for (int i = 0; i < tablero.size(); i++) { cout << tablero[i] << ", "; } cout << endl; }
N-Reinas int main(int argc, char* argv[]) { nReinas* m = new nReinas(50); DFS<nReinas> e(m); while (nReinas* s = e.next()) { s->print(); delete s; } return 0; }