Treba mat binarku SCIPu nainstalovanu v tomto adresari.
http://scip.zib.de/

====Zakladne demo SCIPu:====

Pouzivame format LP (na rozdiel od MPS sa da citat).
http://lpsolve.sourceforge.net/5.0/CPLEX-format.htm

Ukazka je v basic.lp
Pusta sa ako:
./scip -c "read basic.lp" -c "optimize" -c "write solution basic.sol" -c "q"

V subore basic.sol je vystup. 

====Vertex cover====

Vo vertex_cover.cc sa nachadza ukazka ako zo vstupu pre vertex cover
(format nizsie), vyrobit vstup pre SCIP, pustit SCIP a nasledne ako
precitat vystup a vypisat vysledok.  

Format vstupu pre vertex cover bude klasicky: Na prvom riadku pocet
vrcholov (n) a pocet hran (m). Dalsie riadky su popisy hran, kde na
kazdom riadku su dve cisla, idcka vrcholov, ktore hrana spaja (vrcholy
cislujeme cisla 1, 2, ..., n)

Pozn.: Vyuzivame interakciu cez subory a pustenie SCIPu cez prikaz
system. Existuje aj C++ API, ale prijemnost jeho pouzivania a uroven
dokumentacie je nizka, preto ho pouzivat nebudeme.

Program skompilujeme ako:
g++ -O2 vertex_cover.cc -o vertex_cover
A pustime ako:
./vertex_cover <vertex_cover.in

Pokial chcete vidiet ILP tak sa pozrite do tmp.lp.


====TSP==== 

Format vstupu: Prvy riadok pocet vrcholov.  Potom matica susednosti
(vid. tsp*.in).

V tsp_slow.cc sa nachadza program, ktory pre TSP vytvori integer
linear program, podla popisu tu:
http://en.wikipedia.org/wiki/Travelling_salesman_problem#Integer_linear_programming_formulation

Program kompilujeme a pustame prikazmi:
g++ -O2 tsp_slow.cc -o tsp_slow
./tsp_slow <tsp20.in

Pokial chcete vidiet ILP tak sa pozrite do tmp.lp.

====TSP rychlejsie====

Existuje rychlejsi sposob ako riesit TSP.  Predstavme si formulaciu
podobne ako v predchadzajucom pripade, ale vyhodime poslednu sadu
podmienok.  Miesto nich pridame nasledovnu podmienku pre kazdu ostru
podmnozinu vrcholov X: Aspon jedna hrana vychadza z podmnoziny X
von. Aspon jedna vchadza do podmnoziny X zvonku.

Toto je ale exponencialne vela podmienok. S tym sa vieme popasovat
nasledovne: Budeme integer linear program pustat viackrat a z vyssie
uvedenych podmienok pouzijeme iba potrebne. Na zaciatku budeme mat
prazdnu mnozinu podmienok P.

Algoritmus vypoctu bude nasledovny:
1. Pusti ILP pre sadu podmienok P
2. Ak je vysledok jeden cyklus cez vsetky vrcholy, tak skonci.
3. Ak je vo vysledku nejaky cyklus, ktory pokryva iba podmnozinu
vrcholov X, tak pridaj do P podmienky, ktore prinutia pouzitie aspon
jednej hrany, ktora vojde do X a jednej hrany ktora vyjde z X. Vrat sa
na krok 1.

Iny pohlad je taky, ze vyrobime 2-faktor a pokial to nebudeme TSP
cesta, tak budeme jednotlive cykly zakazovat.

Tento algoritmus je implementovany v tsp_fast.cc. Pusta sa:
g++ -O2 tsp_fast.cc -o tsp_fast
./tsp_fast <tsp20.in
