mirror of https://github.com/CGAL/cgal
- added README documentation for the QP_solver testsuite
This commit is contained in:
parent
a094a8a646
commit
c2faa96d72
|
|
@ -1275,6 +1275,7 @@ Principal_component_analysis/demo/Principal_component_analysis/windows/3d/res/id
|
||||||
Principal_component_analysis/demo/Principal_component_analysis/windows/3d/res/idb7.bmp -text svneol=unset#unset
|
Principal_component_analysis/demo/Principal_component_analysis/windows/3d/res/idb7.bmp -text svneol=unset#unset
|
||||||
Principal_component_analysis/demo/Principal_component_analysis/windows/3d/res/idb8.bmp -text svneol=unset#unset
|
Principal_component_analysis/demo/Principal_component_analysis/windows/3d/res/idb8.bmp -text svneol=unset#unset
|
||||||
QP_solver/include/CGAL/QP_solver/Bounds.C -text
|
QP_solver/include/CGAL/QP_solver/Bounds.C -text
|
||||||
|
QP_solver/test/QP_solver/README -text
|
||||||
QP_solver/test/QP_solver/create_test_solver_cin -text
|
QP_solver/test/QP_solver/create_test_solver_cin -text
|
||||||
QP_solver/test/QP_solver/data_to_mps-double.C -text
|
QP_solver/test/QP_solver/data_to_mps-double.C -text
|
||||||
QP_solver/test/QP_solver/data_to_mps-double.cin -text
|
QP_solver/test/QP_solver/data_to_mps-double.cin -text
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,106 @@
|
||||||
|
This file describes the testsuite of package QP_solver.
|
||||||
|
|
||||||
|
THE CGAL TESTSUITE
|
||||||
|
|
||||||
|
What CGAL does for us is to compile and call every file in test/QP_solver that
|
||||||
|
ends in ".C". If for such a file a corresponding ".cin" file exits, the latter
|
||||||
|
is used as input. In our case, this means that the CGAL testsuite will
|
||||||
|
automatically perform the following commands:
|
||||||
|
|
||||||
|
./data_to_mps < data_to_mps.cin
|
||||||
|
./data_to_mps-double < data_to_mps-double.cin
|
||||||
|
./data_to_mps-rational < data_to_mps-rational.cin
|
||||||
|
./master_mps_to_derivatives
|
||||||
|
./test_MPS < test_MPS.cin
|
||||||
|
./test_solver < test_solver.cin
|
||||||
|
|
||||||
|
The main testing takes place in the last call: ./test_solver obtains from its
|
||||||
|
input test_solver.cin a list of names of MPS-files (together with some
|
||||||
|
additional parameters like a pricing strategy identifier and a verbosity
|
||||||
|
level) and solves each of these files. Consequently, in order to change or
|
||||||
|
update the QP_solver testsuite, you have to change the contents of the file
|
||||||
|
test_solver.cin and add additional MPS-files. The sequel tells you how to do
|
||||||
|
this.
|
||||||
|
|
||||||
|
|
||||||
|
THE DIRECTORY STRUCTURE
|
||||||
|
|
||||||
|
The MPS-files that are listed in test_solver.cin all reside in the directory
|
||||||
|
test_solver_data/. If you take a closer look at this directory, you see that
|
||||||
|
it contains two subdirectories, one called "masters" and one called
|
||||||
|
"derivatives". The idea behind this is that we put a new testcase into the
|
||||||
|
masters/ directory and then use this "master MPS-file" to machine-generate
|
||||||
|
some variants of this testcase; these variants (called "derivatives") are
|
||||||
|
stored in the derivatives/ directory. (The derivates are generated by the
|
||||||
|
./master_mps_to_derivatives program, which in turn is called from
|
||||||
|
./create_test_solver_cin, see below.)
|
||||||
|
|
||||||
|
The derivatives/ directory is a flat directory of derived MPS-files. In
|
||||||
|
contrast to this, the masters/ directory contains two subdirectories, cgal/
|
||||||
|
and additional/, and only these subdirectories contain MPS-files. This allows
|
||||||
|
us to run two testsuites: the files in cgal/ constitute the subset of
|
||||||
|
testcases that will be run by the CGAL testsuite. Some additional testcases
|
||||||
|
are contained in additional/; these might take long(er) to solve and are
|
||||||
|
therefore not suited for the CGAL testsuite.
|
||||||
|
|
||||||
|
|
||||||
|
THE ./create_test_solver_cin SCRIPT
|
||||||
|
|
||||||
|
The script ./create_test_solver_cin serves two purposes: it produces the file
|
||||||
|
test_solver.cin and generates from the master MPS-files the derivatives. A
|
||||||
|
call to the script should look like this:
|
||||||
|
|
||||||
|
./create_test_solver_cin CGAL|all verbosity
|
||||||
|
|
||||||
|
For instance, "./create_test_solver_cin CGAL 0" will collect all master
|
||||||
|
MPS-files in test_solver_data/masters/cgal/ and for each of them make sure
|
||||||
|
that all its derivatives are present (generating them if need be, see below);
|
||||||
|
finally, it collects a list of all these master and derivative filenames and
|
||||||
|
stores it in test_solver.cin. The test_solver.cin file obtained in this way
|
||||||
|
is what gets commited to the CGAL repository.
|
||||||
|
|
||||||
|
In contrast to this, "./create_test_solver_cin all 0" collects all master
|
||||||
|
MPS-files (i.e., all MPS-files in test_solver_data/masters/), generates (if
|
||||||
|
needed) the derivatives and puts the list of the names of all these files into
|
||||||
|
test_solver.cin. The resulting test_solver.cin should usually not be commited
|
||||||
|
to the CGAL repository (it takes too long to run this suite); so you would run
|
||||||
|
"./test_solver < test_solver.cin" only locally.
|
||||||
|
|
||||||
|
The ./create_test_solver_cin script is what you need for the daily QP_solver
|
||||||
|
work. If you add, for instance, a new testcase, "Test.mps", say, to
|
||||||
|
test_solver_data/masters/cgal/, you would call "./create_test_solver_cin CGAL
|
||||||
|
0" which will generate the derivatives ("Test_shifted.mps") of the newly added
|
||||||
|
testcase (and, by the way, warn you that you should commit these files to the
|
||||||
|
SVN repository) and construct the new test_solver.cin.
|
||||||
|
|
||||||
|
As a remark: if you start off with a ".data"-file (i.e., with "Test.data")
|
||||||
|
then you can solve this file by running
|
||||||
|
|
||||||
|
./data_to_mps "Simple testcase" "Simple" < Test.data | ./test_MPS 0
|
||||||
|
|
||||||
|
where the "0" argument is the verbosity (tune it up if need be).
|
||||||
|
|
||||||
|
|
||||||
|
HOW THE DERIVATES ARE GENERATED
|
||||||
|
|
||||||
|
The ./create_test_solver_cin script generates the derivates by calling the
|
||||||
|
program ./master_mps_to_derivatives (compiling the latter first, if
|
||||||
|
needed). The C++-program master_mps_to_derivatives.C reads in a master
|
||||||
|
MPS-file and generates all the derivatives. So if you want to add a new kind
|
||||||
|
of derivates then you should look into master_mps_to_derivatives.C; you
|
||||||
|
probably want to create a routine like create_shifted_instance(). Please do
|
||||||
|
name derived instances with a suffix (like "_shifted"); the prefix MUST stay
|
||||||
|
the same for the ./create_test_solver_cin script to work (see routine
|
||||||
|
create_output_file() in master_mps_to_derivatives.C).
|
||||||
|
|
||||||
|
Note that ./create_test_solver_cin is clever enough not to generate all
|
||||||
|
derivatives anew when you call it. Rather, it searches for all currently
|
||||||
|
known derivatives of a given master MPS-file and looks whether the master is
|
||||||
|
newer than any of the derivatives; if so, it regenerates the derivatives. (In
|
||||||
|
particular, this means that when you extend master_mps_to_derivatives.C to
|
||||||
|
output a new kind of derivatives, you first need to touch the masters by doing
|
||||||
|
|
||||||
|
touch test_solver_data/masters/cgal/*
|
||||||
|
touch test_solver_data/masters/additional/*
|
||||||
|
|
||||||
|
This will cause all derivatives to be generated anew.)
|
||||||
Loading…
Reference in New Issue