This file is a short user manual for the CQKnPClass project, a small collection of solvers for Continuous (Convex) Quadratic Knapsack Problems (CQKnP).
This code is provided "as is", without any explicit or implicit warranty that it will properly behave or it will suit you needs. Although codes reaching the distribution phase have usually been extensively tested, we cannot guarantee that they are absolutely bug-free (who can?). Any use of the codes is at you own risk: in no case we could be considered liable for any damage or loss you would eventually suffer, either directly or indirectly, for having used this code. More details about the non-warranty attached to this code are available in the license description file.
The code also comes with a "good will only" support: feel free to contact us for any comments/critics/bug report/request help you may have, we will be happy to try to answer and help you. But we cannot spend much time solving your problems, just the time to read a couple of e-mails and send you fast suggestions if the problem is easily solvable. Apart from that, we can't offer you any support.
This code is provided free of charge under the "GNU Lesser General Public License", see the file doc/LGPL.txt.
Current version is: 1.05
Current date is: December 22, 2012
This release comes out with the following files:
CQKnPClass. It is an abstract class with pure virtual methods, so that you cannot declare objects of type CQKnPClass, but only of derived classes of its. CQKnPClass offers a general interface for CQKnP solver codes, with methods for setting and reading the data of the problems, for solving it and retrieving solution informations, and so on. The actual CQKnP solvers distributed in this package conforms with the interface, i.e., they derive from CQKnPClass; however, the idea is that applications using this interface would require almost no changes if any other solvers implementing the interface is used. Carefully read the public interface of the class to understand how to use the public methods of the class.CQKnPClone, implementing a "fake" CQKnP solver that takes two "real" ones and does everything on both; useful for testing the solvers (either for correctness or for efficiency) when used within "complex" approachesCQKnPClone class, see lib and extlib belowCQKnPCplex, implementing a CQKnP solver conforming to the CQKnPClass interface based on calls to the commercial (but now free for academic purposes) Cplex solver from IBM. You need to separately obtain a Cplex distribution and link it with this code (see QKnPCplex/makefile below) to make it work. This does not make much of a sense in that Cplex is far slower than the other options, unless one is interested in checking correctness and efficiency of some CQKnP solver.CQKnPCplex class. You should not need to read it.CQKnPCplex class, see lib and extlib belowDualCQKnP, implementing a CQKnP solver based on the standard dual-ascent approach. This class derives from CQKnPClass, hence most of its interface is defined and discussed in CQKnPClass.h; however, for efficiency it is actually restricted to instances where all items have strictly positive quadratic costs and finite bounds (both lower and upper), so in fact it does not fully implement the interface. Furthermore, a few implementation-dependent details (and compile-time switches) which are worth knowing are described in this file.DualCQKnP class. You should not need to read it.DualCQKnP class.ExDualCQKnP, derived from DualCQKnP (and hence from CQKnPClass) and extending it to support all the features of the problem (possibly zero quadratic costs, possibly infinite upper and lower bounds). It is slightly less efficient, so DualCQKnP should be preferred for the instances that it can solve.ExDualCQKnP class. You should not need to read it.ExDualCQKnP class.CQKnPCplex comes commented out by default)