Scippy

SCIP

Solving Constraint Integer Programs

queens.hpp
Go to the documentation of this file.
1/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2/* */
3/* This file is part of the examples to */
4/* An introduction to SCIP */
5/* */
6/* Copyright (C) 2007 Cornelius Schwarz */
7/* */
8/* 2007 University of Bayreuth */
9/* */
10/* */
11/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
12
13/**@file queens.hpp
14 * @brief n-queens example
15 * @author Cornelius Schwarz
16 */
17
18#ifndef QUEENS_H
19#define QUEENS_H
20
21#include <vector>
22#include <iostream>
23
24#include <scip/scip.h>
25#include <scip/scipdefplugins.h>
26
27namespace scipexamples
28{
29 /**@class QueensSolver
30 * @brief solver class for the n-queens problem
31 *
32 * this class implements a solver for the n-queens problem as an mip model, which will be solved using SCIP
33 */
35 {
36 private:
37
38 /** @brief pointer to scip structure
39 *
40 * SCIP organizes all the problem informations by itself, we can access them by the SCIP * pointer
41 */
42 SCIP * _scip;
43
44 /** @brief number of queens */
45 size_t _n;
46
47 /** @brief one binary variable for each field (i,j) on the chess bord
48 *
49 * To access variable information (objective value, bounds,
50 * etc.) use the SCIP_VAR * pointer. Since we want to know the
51 * value of each variable in the solution, we have to store
52 * these pointers.
53 */
54 std::vector<std::vector<SCIP_VAR *> > _vars;
55
56 /** @brief constraints for rows, cols and diags of the chess board
57 *
58 * To access constraint information (right hand side, left hand
59 * side, dual values, etc.) use the SCIP_CONS * pointer. For the
60 * n-queens problem we do not really need to store them but we
61 * do for illustration.
62 */
63 std::vector<SCIP_CONS *> _cons;
64
65 public:
66 /** @brief constructs the BP model for the n-queens problem
67 *
68 * the constructor builds a BP model in scip for the n-queens problem
69 * @param[in] n the number of queens
70 */
71 QueensSolver(size_t n = 8);
72
73 /** @brief destructor this is the place to release the SCIP_VAR
74 * and SCIP_CONS pointers and to free the SCIP pointer
75 * afterwards
76 */
78
79 void solve(void); ///< solves the queens problem using SCIPsolve
80
81 /** @brief display the solution
82 *
83 * a simplex ASCII output function to display the solution of the n - queens problem
84 * @param[in,out] out ostream class for output(default cout)
85 */
86 void disp(std::ostream & out = std::cout);
87 };
88}
89#endif
solver class for the n-queens problem
Definition: queens.hpp:35
~QueensSolver()
destructor this is the place to release the SCIP_VAR and SCIP_CONS pointers and to free the SCIP poin...
Definition: queens.cpp:210
void solve(void)
solves the queens problem using SCIPsolve
Definition: queens.cpp:244
QueensSolver(size_t n=8)
constructs the BP model for the n-queens problem
Definition: queens.cpp:28
void disp(std::ostream &out=std::cout)
display the solution
Definition: queens.cpp:173
SCIP callable library.
default SCIP plugins