diff --git a/CMakeLists.txt b/CMakeLists.txt index 0292960..1259282 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,14 +6,14 @@ set(CMAKE_USER_MAKE_RULES_OVERRIDE set(CMAKE_USER_MAKE_RULES_OVERRIDE_CXX ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cxx_flag_overrides.cmake) -project(MMST) +project(OPW) -#set(MMST_VERSION_MAJOR 0) -#set(MMST_VERSION_MINOR 1) -#set(PACKAGE_VERSION ${MMST_VERSION_MAJOR}.${MMST_VERSION_MINOR}) +#set(OPW_VERSION_MAJOR 0) +#set(OPW_VERSION_MINOR 1) +#set(PACKAGE_VERSION ${OPW_VERSION_MAJOR}.${OPW_VERSION_MINOR}) -#set(MMST_COMPILED ssd${MMST_VERSION_MAJOR}${MMST_VERSION_MINOR}) -set(MMST_COMPILED mmst) +#set(OPW_COMPILED ssd${OPW_VERSION_MAJOR}${OPW_VERSION_MINOR}) +set(OPW_COMPILED opw) # Static so I can copy the executable to another version # Check link for other possible options: diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..a5822cf --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ +# opw + +`opw` is a wrapper library in C++ for commercial and open source solvers + +## Setup + +(1) Install at least one of the currently supported solvers: IBM CPLEX and GNU Linear Programming Kit (GLPK) + +(2) Install Boost + +## Building +``` +$ opw/build$ cmake .. + +$ opw/build$ make +``` + +## Running +``` +Usage: +opw input [options] +``` + +To solve the Generalized Assigment Problem using GLPK with default options for the solver, simply run from inside the `build/` directory: + +``` +$ ./opw --input=../tests/GeneralizedAssignmentProblem/gap_test.txt --debug=2 --model=gap --solver=glpk +``` diff --git a/TODO.txt b/TODO.txt index 2eee636..7977019 100644 --- a/TODO.txt +++ b/TODO.txt @@ -3,7 +3,5 @@ CPLEX Error 3003: Not a mixed-integer problem. - - Add LP printing option? used in Tesco no reversal - Add user and lazy cuts before optimisation? - To incumbent callback add Check(CPXsetintparam(env, CPX_PARAM_MIPCBREDLP, CPX_OFF), env); - diff --git a/cmake/FindGLPK.cmake b/cmake/FindGLPK.cmake new file mode 100644 index 0000000..786d567 --- /dev/null +++ b/cmake/FindGLPK.cmake @@ -0,0 +1,79 @@ +# Find GLPK header and library. +# + +# This module defines the following uncached variables: +# GLPK_FOUND, if false, do not try to use GLPK. +# GLPK_INCLUDE_DIRS, where to find glpk.h. +# GLPK_LIBRARIES, the libraries to link against to use the GLPK library +# GLPK_LIBRARY_DIRS, the directory where the GLPK library is found. + +if(MSVC) + find_path( + GLPK_INCLUDE_DIR + glpk.h + PATHS "C:/glpk-4.65/src/" + ) + + if( GLPK_INCLUDE_DIR ) + find_library( + GLPK_LIBRARY + glpk_4_65.lib glpk_4_65.dll + PATHS "C:/glpk-4.65/w64/" + ) + if( GLPK_LIBRARY ) + set(GLPK_LIBRARY_DIR "") + get_filename_component(GLPK_LIBRARY_DIRS ${GLPK_LIBRARY} PATH) + # Set uncached variables as per standard. + set(GLPK_FOUND ON) + set(GLPK_INCLUDE_DIRS ${GLPK_INCLUDE_DIR}) + set(GLPK_LIBRARIES ${GLPK_LIBRARY}) + endif(GLPK_LIBRARY) + else(GLPK_INCLUDE_DIR) + message(FATAL_ERROR "FindGLPK: Could not find glpk.h") + endif(GLPK_INCLUDE_DIR) + + if(GLPK_FOUND) + if(NOT GLPK_FIND_QUIETLY) + message(STATUS "FindGLPK: Found both glpk.h and glpk_4_65.lib") + endif(NOT GLPK_FIND_QUIETLY) + else(GLPK_FOUND) + if(GLPK_FIND_REQUIRED) + message(FATAL_ERROR "FindGLPK: Could not find glpk.h and/or glpk_4_65.lib") + endif(GLPK_FIND_REQUIRED) + endif(GLPK_FOUND) + +else(MSVC) + find_path( + GLPK_INCLUDE_DIR + glpk.h + PATHS /usr/local/include /usr/include + ) + + if( GLPK_INCLUDE_DIR ) + find_library( + GLPK_LIBRARY + NAMES libglpk.so libglpk.a + PATHS /usr/lib64 /usr/local/lib /usr/lib + ) + if( GLPK_LIBRARY ) + set(GLPK_LIBRARY_DIR "") + get_filename_component(GLPK_LIBRARY_DIRS ${GLPK_LIBRARY} PATH) + # Set uncached variables as per standard. + set(GLPK_FOUND ON) + set(GLPK_INCLUDE_DIRS ${GLPK_INCLUDE_DIR}) + set(GLPK_LIBRARIES ${GLPK_LIBRARY}) + endif(GLPK_LIBRARY) + else(GLPK_INCLUDE_DIR) + message(FATAL_ERROR "FindGLPK: Could not find glpk.h") + endif(GLPK_INCLUDE_DIR) + + if(GLPK_FOUND) + if(NOT GLPK_FIND_QUIETLY) + message(STATUS "FindGLPK: Found both glpk.h and libglpk.a") + endif(NOT GLPK_FIND_QUIETLY) + else(GLPK_FOUND) + if(GLPK_FIND_REQUIRED) + message(FATAL_ERROR "FindGLPK: Could not find glpk.h and/or libglpk.a") + endif(GLPK_FIND_REQUIRED) + endif(GLPK_FOUND) +endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 31ac228..eebf1d5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,22 +1,16 @@ -include_directories(${MMST_SOURCE_DIR}/src) -link_directories(${MMST_BINARY_DIR}/src) - +include_directories(${OPW_SOURCE_DIR}/src) +link_directories(${OPW_BINARY_DIR}/src) SET (Boost_USE_STATIC_LIBS ON) SET (Boost_USE_STATIC_RUNTIME ON) find_package(Boost COMPONENTS) -#find_package(Boost COMPONENTS regex REQUIRED) - -#find_library(SQLITE_LIBRARY_RELEASE sqlite3 VARIANT static) find_package(CPLEX) -if (CPLEX_FOUND) -else () -endif () +find_package(GLPK) -add_executable(${MMST_COMPILED} +add_executable(${OPW_COMPILED} main.cc Util.h Util.cc Option.h Option.cc @@ -25,20 +19,25 @@ add_executable(${MMST_COMPILED} Execute.h Execute.cc Model.h Model.cc Solver.h Solver.cc + + # solvers CPLEX.h CPLEX.cc + GLPK.h GLPK.cc + Solution.h Solution.cc + # models DataCapitalBudgeting.h DataCapitalBudgeting.cc ModelCapitalBudgeting.h ModelCapitalBudgeting.cc + DataGAP.h DataGAP.cc + ModelGAP.h ModelGAP.cc ) -target_link_libraries(${MMST_COMPILED} m) -#target_link_libraries(${MMST_COMPILED} ${SQLITE_LIBRARY_RELEASE}) -#target_link_libraries(${MMST_COMPILED} sqlite3) -target_link_libraries(${MMST_COMPILED} pthread) -#target_link_libraries(${MMST_COMPILED} boost_regex) -target_link_libraries(${MMST_COMPILED} ${Boost_LIBRARIES}) -target_link_libraries(${MMST_COMPILED} cplex-library) -target_link_libraries(${MMST_COMPILED} cplex-concert) -target_link_libraries(${MMST_COMPILED} ilocplex) -target_link_libraries(${MMST_COMPILED} dl) +target_link_libraries(${OPW_COMPILED} m) +target_link_libraries(${OPW_COMPILED} pthread) +target_link_libraries(${OPW_COMPILED} ${Boost_LIBRARIES}) +target_link_libraries(${OPW_COMPILED} cplex-library) +target_link_libraries(${OPW_COMPILED} cplex-concert) +target_link_libraries(${OPW_COMPILED} glpk) +target_link_libraries(${OPW_COMPILED} ilocplex) +target_link_libraries(${OPW_COMPILED} dl) diff --git a/src/CPLEX.cc b/src/CPLEX.cc index ea8605d..f8a7855 100644 --- a/src/CPLEX.cc +++ b/src/CPLEX.cc @@ -1,9 +1,19 @@ -/** - * CPLEX.cc +/* + * Copyright 2018 + * Cristiano Arbex Valle + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * opw is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . * - * Copyright(c) 2018 - * Cristiano Arbex Valle - * All rights reserved. */ #include "CPLEX.h" diff --git a/src/CPLEX.h b/src/CPLEX.h index 17a1053..2f11f3a 100644 --- a/src/CPLEX.h +++ b/src/CPLEX.h @@ -1,9 +1,19 @@ -/** - * CPLEX.h +/* + * Copyright 2018 + * Cristiano Arbex Valle + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * opw is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . * - * Copyright(c) 2018 - * Cristiano Arbex Valle - * All rights reserved. */ #ifndef CPLEX_H diff --git a/src/Data.cc b/src/Data.cc index 7153c55..f889565 100644 --- a/src/Data.cc +++ b/src/Data.cc @@ -11,7 +11,7 @@ Data::Data() { - debug = Options::getInstance()->getIntOption("debug"); + debug = Options::getInstance()->getIntOption("debug"); } Data::~Data() { diff --git a/src/DataGAP.cc b/src/DataGAP.cc new file mode 100644 index 0000000..da571ca --- /dev/null +++ b/src/DataGAP.cc @@ -0,0 +1,105 @@ +/* + * Copyright 2020 Arthur Moreira + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * opw is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include "DataGAP.h" +#include "Options.h" +#include +#include +#include + +DataGAP::DataGAP() : Data() { + numVariables = 0; + numTasks = 0; +} + +DataGAP::~DataGAP() { +} + + +void DataGAP::readData() { + + if (debug) printf("Initialising data for the Generalised Assignment Problem\n\n"); + + std::ifstream inputFile; + + // string file_path = Options::getInstance()->getInputFile(); + string file_path = Options::getInstance()->getStringOption("input"); + + inputFile.open(file_path); + if (inputFile.is_open()) { + + inputFile >> numVariables; + inputFile >> numTasks; + + agentBudget.resize(numVariables); + profitMatrix.resize(numTasks); + weightMatrix.resize(numTasks); + for (int i = 0; i < numTasks; i++) { + profitMatrix[i].resize(numVariables); + weightMatrix[i].resize(numVariables); + } + + for (int j = 0; j < numVariables; j++) { + for (int i = 0; i < numTasks; i++) { + inputFile >> profitMatrix[i][j]; + } + } + for (int j = 0; j < numVariables; j++) { + for (int i = 0; i < numTasks; i++) { + inputFile >> weightMatrix[i][j]; + } + } + for (int j = 0; j < numVariables; j++) { + inputFile >> agentBudget[j]; + } + } + else std::cout << "Unable to open file\n"; + + inputFile.close(); + +} + +void DataGAP::print() { + if (debug) { + printf("Num agents: %2d\n", numVariables); + printf("Num tasks: %2d\n", numTasks); + } +} + + +double DataGAP::getAgentBudget(int i) const { + if (i >= numVariables) Util::throwInvalidArgument("Error: Out of range parameter i in getAgentBudget"); + return agentBudget[i]; +} + +double DataGAP::getProfitMatrix(int i, int j) const { + if (i >= numTasks) {Util::throwInvalidArgument("Error: Out of range parameter i in getProfitMatrix");} + else if (j >= numVariables) {Util::throwInvalidArgument("Error: Out of range parameter j in getProfitMatrix");} + return profitMatrix[i][j]; +} + +double DataGAP::getWeightMatrix(int i, int j) const { + if (i >= numTasks) {Util::throwInvalidArgument("Error: Out of range parameter i in getWeightMatrix");} + else if (j >= numVariables) {Util::throwInvalidArgument("Error: Out of range parameter j in getWeightMatrix");} + return weightMatrix[i][j]; +} + + + + + + diff --git a/src/DataGAP.h b/src/DataGAP.h new file mode 100644 index 0000000..c29f03e --- /dev/null +++ b/src/DataGAP.h @@ -0,0 +1,48 @@ +/* + * Copyright 2020 Arthur Moreira + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * opw is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#ifndef DATAGAP_H +#define DATAGAP_H + +#include "Util.h" +#include "Data.h" + +class DataGAP : public Data { + + private: + int numVariables; + int numTasks; + vector > profitMatrix; + vector > weightMatrix; + vector agentBudget ; + + public: + + DataGAP(); + virtual ~DataGAP(); + + virtual void readData(); + virtual void print(); + + int getNumVariables() const {return numVariables;} + int getNumTasks() const {return numTasks;} + double getAgentBudget(int i) const ; + double getProfitMatrix(int i, int j) const ; + double getWeightMatrix(int i, int j) const ; +}; + +#endif diff --git a/src/Execute.cc b/src/Execute.cc index 0773336..5516de0 100644 --- a/src/Execute.cc +++ b/src/Execute.cc @@ -2,14 +2,30 @@ * Execute.cc * * Copyright(c) 2018 - * Cristiano Arbex Valle - * All rights reserved. + * Cristiano Arbex Valle + * Arthur Moreira + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * opw is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * */ + #include "Execute.h" #include "Options.h" #include "DataCapitalBudgeting.h" #include "ModelCapitalBudgeting.h" +#include "DataGAP.h" +#include "ModelGAP.h" Execute::Execute() { @@ -27,9 +43,12 @@ Execute::~Execute() { void Execute::execute() { float startTime = Util::getTime(); - if (Options::getInstance()->getStringOption("model").compare("toy") == 0) { + if (Options::getInstance()->getStringOption("model").compare("cbp") == 0) { data = new DataCapitalBudgeting(); model = new ModelCapitalBudgeting(); + } else if (Options::getInstance()->getStringOption("model").compare("gap") == 0) { + data = new DataGAP(); + model = new ModelGAP(); } else { data = new Data(); model = new Model(); diff --git a/src/GAPinstances.txt b/src/GAPinstances.txt new file mode 100644 index 0000000..fbca762 --- /dev/null +++ b/src/GAPinstances.txt @@ -0,0 +1,62 @@ + 10 60 + 25 18 23 22 24 16 17 21 22 23 23 25 20 17 25 24 23 23 15 25 20 + 24 18 21 19 15 20 17 20 17 22 24 15 17 16 20 19 24 20 20 25 17 + 23 19 18 16 16 20 19 20 16 19 20 22 16 24 19 22 15 21 + 16 17 22 15 18 22 17 15 23 18 25 21 21 23 17 21 17 25 21 21 15 + 18 24 25 19 21 19 22 21 18 16 21 21 25 15 25 18 18 19 17 22 15 + 19 16 17 18 20 16 16 16 17 24 18 22 18 16 23 21 18 15 + 21 16 21 17 15 19 25 22 25 18 18 23 24 22 19 20 21 25 16 17 24 + 16 19 17 17 16 16 24 16 17 23 24 20 23 17 17 25 22 19 24 24 18 + 21 20 16 20 25 23 21 18 17 23 24 23 15 21 25 24 22 16 + 22 15 25 24 25 20 16 17 15 20 19 23 17 20 24 25 24 23 22 20 23 + 24 23 24 25 19 15 25 19 15 19 18 19 18 25 17 22 15 25 17 15 20 + 22 23 17 21 16 22 21 20 23 23 23 23 22 18 22 18 18 24 + 21 20 25 23 23 23 18 22 24 20 23 15 20 19 21 18 24 17 15 17 21 + 21 19 24 24 15 24 21 24 23 25 17 23 17 18 19 20 25 25 21 20 23 + 16 25 24 24 22 24 22 23 20 19 19 16 17 15 19 23 22 25 + 15 16 15 15 24 25 19 22 15 23 21 19 16 21 16 15 21 17 23 20 25 + 23 25 16 15 20 15 18 25 19 20 18 16 22 21 23 22 21 25 19 18 19 + 16 22 15 15 22 21 16 21 23 19 20 24 18 17 18 17 19 16 + 15 17 15 21 21 17 15 21 25 25 17 16 15 19 18 25 18 16 21 21 21 + 20 24 21 15 15 21 25 24 22 20 15 21 25 22 18 15 21 15 22 15 23 + 23 17 16 16 18 21 17 25 19 20 25 25 25 17 23 25 16 23 + 22 16 25 22 20 18 23 18 22 25 17 15 15 23 20 22 19 15 20 23 16 + 21 21 25 17 18 18 15 24 17 21 22 23 15 16 23 20 17 16 15 21 16 + 21 23 16 24 15 21 22 18 20 19 18 22 20 20 19 16 18 22 + 18 16 16 24 21 19 25 19 23 22 16 22 20 17 23 23 15 19 23 15 21 + 17 22 20 21 15 23 15 21 15 22 25 18 19 21 25 15 15 15 24 22 19 + 17 22 25 16 25 19 24 24 16 15 21 24 18 18 25 18 20 25 + 21 15 19 24 21 16 23 19 22 24 20 19 20 20 21 23 19 15 23 15 17 + 22 20 16 23 17 20 24 21 16 17 19 16 24 17 21 16 20 23 22 20 20 + 20 18 15 19 25 22 21 19 18 23 15 16 24 20 19 25 15 17 + 16 25 23 24 19 17 17 16 18 17 12 10 24 25 6 18 17 6 10 10 6 + 11 8 25 22 18 18 12 17 5 16 8 17 15 22 13 13 15 10 25 15 18 + 20 25 6 18 15 24 9 16 7 15 24 9 18 12 9 19 22 16 + 10 7 20 18 19 7 8 8 18 7 8 16 14 11 20 17 5 6 17 19 21 + 20 10 5 25 15 5 16 19 11 14 13 12 22 18 13 6 8 17 5 5 23 + 23 11 12 17 17 19 21 24 15 11 23 11 18 6 21 8 24 14 + 5 5 13 22 5 25 9 9 14 8 11 8 13 10 16 12 5 20 19 16 13 + 19 18 8 18 6 23 9 12 12 21 11 13 8 17 16 12 14 22 13 12 16 + 24 7 18 17 8 17 17 25 22 16 20 13 12 22 12 14 8 18 + 25 19 15 7 21 16 23 10 24 14 19 17 10 14 25 21 13 6 8 8 15 + 13 20 19 11 7 18 6 13 9 13 7 16 23 9 7 6 7 13 7 16 8 + 21 14 16 25 22 7 10 13 17 23 6 19 22 15 14 10 23 25 + 25 20 25 13 7 6 11 7 12 17 18 23 16 25 21 9 19 20 13 24 24 + 9 17 20 19 13 6 18 11 8 5 6 17 11 9 8 16 16 24 12 5 12 + 15 14 10 8 21 13 17 16 18 7 15 22 5 9 22 12 25 11 + 23 8 15 7 15 7 12 10 17 13 13 11 21 23 21 8 10 17 15 25 10 + 13 10 18 18 9 11 22 18 24 24 18 21 22 19 17 23 25 16 5 11 7 + 10 18 5 7 19 12 9 23 25 17 13 11 10 6 5 19 22 24 + 25 19 24 20 18 6 8 16 22 14 22 8 15 13 15 12 21 20 13 16 12 + 20 7 18 19 24 9 7 10 11 17 17 11 21 25 5 18 9 22 22 11 9 + 14 7 13 13 22 20 15 17 20 8 21 8 5 25 21 19 10 8 + 18 24 20 8 19 21 23 6 20 23 23 9 7 23 20 7 6 11 23 16 17 + 24 23 19 14 13 15 22 13 16 6 14 20 11 13 19 17 12 6 23 13 25 + 23 12 17 5 24 25 11 10 25 25 22 12 12 10 8 8 18 14 + 18 10 9 23 17 13 15 13 8 5 15 6 15 12 8 23 7 22 10 9 14 + 24 8 11 7 20 24 6 22 20 6 18 8 10 6 22 18 18 5 7 13 25 + 7 15 18 15 19 7 23 11 7 6 9 15 7 12 9 20 11 23 + 22 20 10 16 24 22 15 5 25 24 11 8 7 20 24 6 19 13 14 8 18 + 6 16 21 6 16 14 21 18 5 15 21 7 10 20 18 22 14 12 18 17 9 + 14 12 17 22 8 16 13 12 6 20 20 6 9 22 13 20 24 19 + 75 68 67 70 70 72 73 77 64 72 \ No newline at end of file diff --git a/src/GLPK.cc b/src/GLPK.cc new file mode 100644 index 0000000..98ab6de --- /dev/null +++ b/src/GLPK.cc @@ -0,0 +1,404 @@ +/* + * Copyright 2020 Arthur Moreira + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * opw is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + + +/* Normally all GLPK API routines start array indexing from 1, + * not from 0 (except the specially stipulated cases). + * This means, for example, that if some vector x of the length n + * is passed as an array to some GLPK API routine, the latter expects + * vector components to be placed in locations x[1], x[2], . . . , x[n], + * and the location x[0] normally is not used. + * To avoid indexing errors it is most convenient and most reliable + * to declare the array x as follows: + * double x[1+n]; + * +*/ + + +#include "GLPK.h" +#include "Model.h" + + +GLPK::GLPK() : Solver() { + + //env = glp_init_env(); + problem = glp_create_prob(); + glp_init_iocp(&parm); +} + +GLPK::~GLPK() { + + glp_free_env(); +} + +void GLPK::deleteAndRecreateProblem() { + + glp_delete_prob(problem); + problem = glp_create_prob(); +} + +void GLPK::printSolverName() { + printf("Solver used is GLPK\n"); +} + +int GLPK::getNumRows() { + return glp_get_num_rows(problem); +} + +int GLPK::getNumCols() { + return glp_get_num_cols(problem); +} + +void GLPK::changeObjectiveSense(bool isMax) { + glp_set_obj_dir(problem, isMax ? GLP_MAX : GLP_MIN); +} + + +int GLPK::getNodeCount() { + return 0; +} + +/* +//print coefficients matrix +void printmat(vector > coefs) { + unsigned int i, j; + for (i = 0; i < coefs.size(); ++i) { + for (j = 0; j < coefs.size(); ++j) { + printf("%f ", coefs[i][j]); + } + printf("\n"); + } +} +*/ + + + +/** + * lower -> lower bound of variable + * upper -> upper bound of variable + * obj -> objective function coefficient + * name -> if not empty set the variable name + */ +void GLPK::addVariable(const double lower, const double upper, const double obj, string name) { + + int new_col; + new_col = glp_add_cols(problem, 1); + glp_set_col_name(problem, new_col, name.c_str()); + if (lower == upper) { + glp_set_col_bnds(problem, new_col, GLP_FX, lower, upper); + } + else { + glp_set_col_bnds(problem, new_col, GLP_DB, lower, upper); + } + + glp_set_obj_coef(problem, new_col, obj); + + //TODO + //deal with name == NULL + + addKey(name, new_col); +} + +void GLPK::setVariableWarmStart(string colName, double value) {} + +void GLPK::setVariablesWarmStart(vector colNames, vector values) {} + +void GLPK::refineMIPStart() {} + + + +/** + * numCols -> number of variables to be added + * lower -> array of size (numCols), lower bound of variables + * upper -> array of size (numCols), upper bound of variables + * obj -> Array of size (numCols), objective function coefficients + * name -> if not empty set the variable name (includes index in the end starting from zero) + */ +void GLPK::addVariables(int numCols, const double lower, const double upper, const double *obj, string& name) {} + + + +/** + * numCols -> number of variables to be added + * ub -> upper bound of all variables + * lb -> lower bound of all variables + * obj -> Array of size (numCols), objective function coefficients + * name -> if not empty set the variable name (includes index in the end starting from zero) + */ +void GLPK::addIntegerVariables(int numCols, double lb, double ub, const double* obj, string& name) {} + +void GLPK::addIntegerVariable(const double lower, const double upper, const double obj, string name) { + + int new_col; + new_col = glp_add_cols(problem, 1); + glp_set_col_name(problem, new_col, name.c_str()); + glp_set_col_bnds(problem, new_col, GLP_DB, lower, upper); + glp_set_obj_coef(problem, new_col, obj); + glp_set_col_kind(problem, new_col, GLP_IV); + + //TODO + //deal with name == NULL + + addKey(name, new_col); +} + +/* obj -> objective function coefficient + * name -> if not empty, set variable name + */ + +void GLPK::addBinaryVariable(const double obj, string name) { + + int new_col; + new_col = glp_add_cols(problem, 1); + glp_set_col_name(problem, new_col, name.c_str()); + glp_set_col_bnds(problem, new_col, GLP_DB, 0, 1); + glp_set_obj_coef(problem, new_col, obj); + glp_set_col_kind(problem, new_col, GLP_BV); + + + //TODO + //deal with name == NULL + + + addKey(name, new_col); +} + + +/** + * numCols -> number of variables to be added + * obj -> Array of size (numCols), objective function coefficients + * name -> if not empty set the variable name (includes index in the end starting from zero) + */ +void GLPK::addBinaryVariables(int numCols, const double* obj, string& name) { + + int first_new_col; + + // this function returns the ordinal number of + // the first of the new added columns + first_new_col = glp_add_cols(problem, numCols); + + for (int i = 0; i < numCols; i++) { + string n = name + lex(i); + glp_set_col_name(problem, first_new_col + i, n.c_str()); + glp_set_col_bnds(problem, first_new_col + i, GLP_DB, 0, 1); + glp_set_obj_coef(problem, first_new_col + i, obj[i]); + glp_set_col_kind(problem, first_new_col + i, GLP_BV); + addKey(n, first_new_col + i); + } +} + +/** + * colNames - Variable names of the corresponding constraint + * elements - non zero coefficients + * rhs - right hand side + * sense - 'L': <= + * 'E': == + * 'G': >= + * name - constraint name + */ +void GLPK::addRow(vector colNames, vector elements, double rhs, char sense, string name) { + + int numNonZero = (int)colNames.size(); + + vector col_indices(numNonZero+1); //+1 por causa do GLPK + vector elements_a(numNonZero+1); + for (int i = 0; i < numNonZero; i++) { + elements_a[i+1] = elements[i]; + + col_indices[i+1] = getColIndex(colNames[i].c_str()); + if (col_indices[i+1] == -1) printf("In addRow, colIndice was not found for variable %s. Is the name wrong?\n", colNames[i].c_str()); + } + + //for (int i = 0; i < numNonZero; i++) printf("%d\n", col_indices[i+1]); + + int new_row; + new_row = glp_add_rows(problem, 1); + glp_set_row_name(problem, new_row, name.c_str()); + if (sense == 'L') { + glp_set_row_bnds(problem, new_row, GLP_UP, -1 * DBL_MAX, rhs); + } + else if (sense == 'E') { + glp_set_row_bnds(problem, new_row, GLP_FX, rhs, rhs); + } + else if (sense == 'G') { + glp_set_row_bnds(problem, new_row, GLP_LO, rhs, DBL_MAX); + } + + //set coeficients + glp_set_mat_row(problem, new_row, numNonZero, &col_indices[0], &elements_a[0]); + + //TODO + //deal with name == NULL +} + +void GLPK::setPriorityInBranching(vector colNames, int priority) {} + +void GLPK::setPriorityInBranching(vector colNames, vector priorities) {} + +void GLPK::relax() {} + +void GLPK::doSolve() { + status = glp_intopt(problem, &parm); +} + +int GLPK:: getStatus() { + return status; +} + +double GLPK::getObjValue() { + double objValue = 0; + objValue = glp_get_obj_val(problem); + return objValue; +} + +double GLPK::getBestBound() { return 0; } + +void GLPK::getColSolution() { + int numCols = getNumCols(); + colSolution.resize(numCols); + for (int i = 0; i < numCols; i++) { + colSolution[i] = glp_get_col_prim(problem, i+1); + } + // return colSolution; +} + +// PARAMS + +void GLPK::setLPMethod(int lp) { + // 1 - Primal + // 2 - Dual + + // if (lp == 1) parm.meth = GLP_PRIMAL; + // else if (lp == 2) parm.meth = GLP_DUAL; +} + + // in milliseconds +void GLPK::setTimeLimit(double time) { + if (time > 0) { + parm.tm_lim = time; + } +} + +// Nao achei respectiva função no GLPK +void GLPK::setNodeLimit(int lim) {} + +void GLPK::setLPTolerance(double tolerance) {} + +void GLPK::setMIPTolerances(double tolerance) {} + +void GLPK::setRandomSeed(int seed) {} + +void GLPK::setNumericalEmphasis(int value) {} + +void GLPK::enablePresolve(bool enable) { + if (enable) parm.presolve = GLP_ON; +} + +void GLPK::disableDefaultCuts(bool disable) {} + +void GLPK::setSolverCuts(int solverCuts, int clique, int cover, int disj, int landp, int flowcover, int flowpath, int gomory, int gub, int implbd, int mir, int mcf, int zerohalf) {} + +void GLPK::setMIPEmphasis(int t) {} + +void GLPK::setSolverParallelism (int t, int m) {} + +void GLPK::setSolverLocalBranching(int t) {} + +void GLPK::setBranchingPolicy(int t) {} + +void GLPK::setNodeHeuristic(int t) {} + +void GLPK::setProbingLevel(int t) {} + + +// DEBUG + +void GLPK::debugInformation(int debug) {} + +void GLPK::debugLevel(int debugLevel) {} + +void GLPK::exportModel(const char* filename) { + glp_write_lp(problem, NULL, filename); +} + + +/////////////////////////////// +// // +// // +// STATUS FUNCTIONS // +/////////////////////////////// + +bool GLPK::solutionExists() { + return isOptimal() || isSolutionLimit() || isMIPTimeLimitFeasible() || isBestNumerical() || status == GLP_FEAS; +} + +bool GLPK::isOptimal() { + return isIntegerOptimal() || status == GLP_OPT; +} + +bool GLPK::isIntegerOptimal() { + return status == GLP_OPT; +} + +bool GLPK::isInfeasible() { + return status == GLP_INFEAS || status == GLP_NOFEAS; +} + +bool GLPK::isInfeasibleDueToScaling() { return 0; } + +bool GLPK::isUnbounded() { + return status == GLP_UNBND; +} + +bool GLPK::isInfeasibleOrUnbounded() { return 0; } + +bool GLPK::isSolutionLimit() { + return status; +} + +bool GLPK::isTimeLimit() { + return status == GLP_ETMLIM || isMIPTimeLimitFeasible() || + isMIPTimeLimitInfeasible(); +} + +bool GLPK::isMIPTimeLimitFeasible() { return 0; } + +bool GLPK::isMIPTimeLimitInfeasible() { return 0; } + +bool GLPK::isObjectiveLimitReached() { + //for the dual simplex only + return status == GLP_EOBJLL || status == GLP_EOBJUL; +} + +bool GLPK::isIterationLimitReached() { + return status == GLP_EITLIM; +} + +bool GLPK::isBestNumerical() { return 0; } + +bool GLPK::isNumericalDifficulties() { return 0; } + + +/////////////////////////////////// +// // +// // +//STATUS FUNCIONS // +/////////////////////////////////// + + + + diff --git a/src/GLPK.h b/src/GLPK.h new file mode 100644 index 0000000..d1136ed --- /dev/null +++ b/src/GLPK.h @@ -0,0 +1,131 @@ +/* + * GLPK.cc + * + * Copyright 2020 Arthur Moreira + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * opw is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * */ + + +#pragma once + +#include +#include "Solver.h" + + + +class GLPK : public Solver { + + private: + //int env; + glp_prob *problem; + glp_iocp parm; + + public: + GLPK(); + virtual ~GLPK(); + virtual void deleteAndRecreateProblem(); + + //set data + virtual void changeObjectiveSense(bool isMax); + virtual void addVariable(const double lower, const double upper, const double obj, string name); + virtual void addVariables(int numCols, const double lower, const double upper, const double* obj, string& name); + virtual void addBinaryVariable(const double obj, string name); + virtual void addBinaryVariables(int numCols, const double* obj, string& name); + virtual void addIntegerVariable(const double lower, const double upper, const double obj, string name); + virtual void addIntegerVariables(int numCols, double lb, double ub, const double* obj, string& name); + //SENSE + //L - <= + //E - == + //G - >= + virtual void addRow(vector colNames, vector elements, double rhs, char sense, string name); + virtual void setPriorityInBranching(vector colNames, int priority); + virtual void setPriorityInBranching(vector colNames, vector priorities); + + virtual void setVariablesWarmStart(vector colNames, vector values); + virtual void setVariableWarmStart(string colName, double value); + virtual void refineMIPStart(); + + virtual void relax(); + virtual void doSolve(); + + //Get data + virtual int getNumCols(); + virtual int getNumRows(); + virtual int getStatus(); + virtual double getObjValue(); + virtual double getBestBound(); + virtual void getColSolution(); + + virtual int getNodeCount(); + + // Params + virtual void setTimeLimit(double time); + virtual void setNodeLimit(int lim); + virtual void enablePresolve(bool enable = true); + + virtual void setLPMethod(int lp); + virtual void setLPTolerance(double tolerance); + virtual void setMIPTolerances(double tolerance); + virtual void setRandomSeed(int seed); + virtual void setNumericalEmphasis(int value); + virtual void disableDefaultCuts(bool disable = true); + virtual void setSolverCuts(int solverCuts = 0, int clique = -2, int cover = -2, int disj = -2, int landp = -2, + int flowcover = -2, int flowpath = -2, int gomory = -2, int gub = -2, int implbd = -2, + int mir = -2, int mcf = -2, int zerohalf = -2); + + + // 0 - balanced, 1 - feasibility, 2 - optimality + virtual void setMIPEmphasis(int t); + virtual void setSolverParallelism(int t, int m); + virtual void setSolverLocalBranching(int t); + virtual void setBranchingPolicy(int t); + virtual void setNodeHeuristic(int t); + virtual void setProbingLevel(int t); + + + // Debug + virtual void printSolverName(); + virtual void debugInformation(int debug); + virtual void debugLevel(int debugLevel); + virtual void exportModel(const char* filename); + + // Status + virtual bool solutionExists(); + + virtual bool isOptimal (); + virtual bool isIntegerOptimal (); + virtual bool isInfeasible (); + virtual bool isInfeasibleDueToScaling(); + virtual bool isUnbounded (); + virtual bool isInfeasibleOrUnbounded (); + virtual bool isSolutionLimit (); + virtual bool isTimeLimit (); + virtual bool isMIPTimeLimitFeasible (); + virtual bool isMIPTimeLimitInfeasible(); + virtual bool isObjectiveLimitReached (); + virtual bool isIterationLimitReached (); + virtual bool isBestNumerical (); + virtual bool isNumericalDifficulties (); + + // Callbacks + /* + virtual void addLazyCallback (void* userData); + virtual void addUserCutCallback (void* userData); + virtual void addIncumbentCallback(void* userData); + virtual void addNodeCallback (void* userData); + virtual void addSolveCallback (void* userData); + virtual void addInfoCallback (void* userData); + */ +}; diff --git a/src/Model.cc b/src/Model.cc index eaade67..c30628f 100644 --- a/src/Model.cc +++ b/src/Model.cc @@ -2,12 +2,27 @@ * Model.cc * * Copyright(c) 2018 - * Cristiano Arbex Valle - * All rights reserved. + * Cristiano Arbex Valle + * Arthur Moreira + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * opw is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * */ + #include "Model.h" #include "CPLEX.h" +#include "GLPK.h" #include "Options.h" @@ -21,6 +36,8 @@ Model::Model() { if (solverUsed.compare("cplex") == 0) { solver = new CPLEX(); + } else if (solverUsed.compare("glpk") == 0) { + solver = new GLPK(); } else { solver = new Solver(); } diff --git a/src/ModelGAP.cc b/src/ModelGAP.cc new file mode 100644 index 0000000..2b8f9b5 --- /dev/null +++ b/src/ModelGAP.cc @@ -0,0 +1,154 @@ +/* + * Copyright 2020 + * Arthur Moreira + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * opw is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "ModelGAP.h" +#include "Options.h" +#include "DataGAP.h" +#include + +ModelGAP::ModelGAP() : Model() { + //number of agents (V) and tasks (T) + V = 0; + T = 0; + x = "x"; +} + + +ModelGAP::~ModelGAP() { +} + + +void ModelGAP::execute(const Data* data) { + + float startTime = Util::getTime(); + + if (debug > 1) solver->printSolverName(); + + + createModel(data); + reserveSolutionSpace(data); + assignWarmStart(); + setSolverParameters(1); // 1 = maximization + + solver->addInfoCallback(this); + + solve(data); + totalTime = Util::getTime() - startTime; + printSolutionVariables(); +} + + +void ModelGAP::printSolutionVariables(int digits, int decimals) { + if (debug) { + printf("\nSolution: \n"); + for (int i = 0; i < T; i++) { + for (int j = 0; j < V; j++) { + printf(" x_%d_%d = %.0f\n", i, j, sol_x[i][j]); + } + } + } +} + + +void ModelGAP::reserveSolutionSpace(const Data* data) { + sol_x.resize(T, vector (V,0)); +} + +void ModelGAP::readSolution() { + totalNodes = solver->getNodeCount(); + solution->resetSolution(); + solution->setSolutionStatus(solver->solutionExists(), solver->isOptimal(), solver->isInfeasible(), solver->isUnbounded()); + if (!solver->solutionExists()) { + if (debug) printf("Solution does not exist\n"); + } + else { + solution->setValue (solver->getObjValue() ); + solution->setBestBound(solver->getBestBound()); + + for (int i = 0; i < T; i++) { + for (int j = 0; j < V; j++) { + sol_x[i][j] = solver->getColValue(x + lex(i) + lex(j)); + } + } + } +} + + +void ModelGAP::createModel(const Data* data) { + + const DataGAP* dataG = dynamic_cast(data); + V = dataG->getNumVariables(); + T = dataG->getNumTasks(); + + //1 = maximisation problem, 0 = minimisation problem + solver->changeObjectiveSense(1); + + + + //objective function data + for (int j = 0; j < V; j++) { + for (int i = 0; i < T; i++) { + solver->addBinaryVariable(dataG->getProfitMatrix(i,j), x + lex(i) + lex(j)); + } + } + + + //constraints data + vector > colNames; + vector > colNames2; + + vector > weights; + vector ones_array; + + colNames.resize(T, vector (V, " ")); + colNames2.resize(V, vector (T, " ")); + + weights.resize(V, vector (T, 0)); + ones_array.resize(V, 1); + + for (int i = 0; i < T; i++) { + for (int j = 0; j < V; j++) { + colNames[i][j] = x + lex(i) + lex(j); + colNames2[j][i] = x + lex(i) + lex(j); + } + } + + + //a matrix weights eh transposta + //pois addRow() recebe vetores coluna + for (int i = 0; i < T; i++) { + for (int j = 0; j < V; j++) { + weights[j][i] = dataG->getWeightMatrix(i,j); + } + } + + for (int j = 0; j < V; j++) { + solver->addRow(colNames2[j], weights[j], dataG->getAgentBudget(j), 'L', "Agent " + lex(j) + " Budget"); + } + + //'each task to exactly one agent' constraint + for (int i = 0; i < T; i++) { + solver->addRow(colNames[i], ones_array, 1, 'E', "each task to one agent"); + } + + + +} + +void ModelGAP::assignWarmStart() { + +} diff --git a/src/ModelGAP.h b/src/ModelGAP.h new file mode 100644 index 0000000..01bd1a4 --- /dev/null +++ b/src/ModelGAP.h @@ -0,0 +1,51 @@ +/* + * Copyright 2020 Arthur Moreira + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * opw is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#ifndef MODELGAP_H +#define MODELGAP_H + +#include "Model.h" +#include "Solution.h" + + +class ModelGAP : public Model { + + private: + + string x; + + int V; + int T; + vector > sol_x; + + virtual void reserveSolutionSpace(const Data* data); + virtual void readSolution(); + virtual void assignWarmStart(); + virtual void createModel(const Data* data); + + void printSolutionVariables(int digits = 5, int decimals = 2); + + public: + + ModelGAP(); + + virtual ~ModelGAP(); + + virtual void execute(const Data* data); +}; + +#endif diff --git a/src/Options.cc b/src/Options.cc index cabf713..bfa2d34 100644 --- a/src/Options.cc +++ b/src/Options.cc @@ -1,11 +1,22 @@ -/** - * Options.cc - * +/* * Copyright(c) 2018 - * Cristiano Arbex Valle - * All rights reserved. + * Cristiano Arbex Valle + * Arthur Moreira + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * opw is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + #include "Options.h" #include #include @@ -18,7 +29,7 @@ Options* Options::instance = new Options(); -Options* Options::getInstance () { +Options* Options::getInstance() { return instance; } @@ -53,9 +64,11 @@ void Options::assignDefaultValues() { vector solverValues; solverValues.push_back("cplex"); + solverValues.push_back("glpk"); vector modelValues; - modelValues.push_back("toy"); + modelValues.push_back("cbp"); + modelValues.push_back("gap"); vector empty; @@ -281,7 +294,7 @@ void Options::print() { void Options::printHelp() { printf("Usage:\n"); - printf("tesco [options]\n"); + printf("opw [options]\n"); printf("\n"); printf("Options:\n"); for (int i = 0; i < (int)options.size(); i++) { diff --git a/src/Options.h b/src/Options.h index 7af619c..a494d4e 100644 --- a/src/Options.h +++ b/src/Options.h @@ -1,9 +1,19 @@ -/** - * Options.h - * +/* * Copyright(c) 2018 - * Cristiano Arbex Valle - * All rights reserved. + * Cristiano Arbex Valle + * Arthur Moreira + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * opw is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ /********************************************* @@ -11,13 +21,7 @@ * * Format: --optionName=value * - * Example: ./ssd --debug=1 - * - * The exception is the input file. Its format is just its name. - * - * Example: ./ssd inputFile --debug=1 - * - * + * Example: ./opw --debug=1 * ---------------------------------------------- */ @@ -37,7 +41,10 @@ class Options { /** * Instancia singleton desta classe. */ - static Options* instance; + static Options* instance; + + // input file, must be provided (no name for this option) + string inputFile; vector options; map optionsMap; @@ -70,6 +77,9 @@ class Options { string getOutputOptionsAsText(); string getModifiedOptionsAsText(); + // input file + string getInputFile() { return inputFile; } + // get option values bool getBoolOption (string name); int getIntOption (string name); diff --git a/src/Solution.cc b/src/Solution.cc index 8c5f6aa..ad06940 100644 --- a/src/Solution.cc +++ b/src/Solution.cc @@ -1,11 +1,22 @@ -/** - * Solution.cc - * +/* * Copyright(c) 2018 - * Cristiano Arbex Valle - * All rights reserved. + * Cristiano Arbex Valle + * Arthur Moreira + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * opw is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + #include "Solution.h" #include "Options.h" diff --git a/src/Solver.h b/src/Solver.h index e90d3b2..2ae9c08 100644 --- a/src/Solver.h +++ b/src/Solver.h @@ -1,9 +1,19 @@ -/** - * Solver.h - * +/* * Copyright(c) 2018 - * Cristiano Arbex Valle - * All rights reserved. + * Cristiano Arbex Valle + * Arthur Moreira + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * opw is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ #ifndef SOLVER_H @@ -25,7 +35,7 @@ class SolverError { /** - * Solver, superclass of cplex, gurobi, etc. + * Solver, superclass of cplex, glpk, gurobi, etc. */ class Solver { diff --git a/tests/CapitalBudgetingProblem/README.md b/tests/CapitalBudgetingProblem/README.md new file mode 100644 index 0000000..d008f89 --- /dev/null +++ b/tests/CapitalBudgetingProblem/README.md @@ -0,0 +1 @@ +# Capital Budgeting Problem (CBP) diff --git a/tests/GeneralizedAssignmentProblem/README.md b/tests/GeneralizedAssignmentProblem/README.md new file mode 100644 index 0000000..4ef7225 --- /dev/null +++ b/tests/GeneralizedAssignmentProblem/README.md @@ -0,0 +1,64 @@ +# Generalized Assignment Problem (GAP) + +These instances are provided by the OR-Library, maintained by J.E. Beasley + +http://people.brunel.ac.uk/~mastjjb/jeb/orlib/gapinfo.html + + The problems in these data files were used in: + + I.H. Osman, "Heuristics for the Generalised Assignment Problem: + Simulated Annealing and Tabu Search Approaches", OR Spektrum, Volume + 17, 211-225, 1995 + + D. Cattrysse, M. Salomon and L.N. Van Wassenhove, "A + set partitioning heuristic for the generalized + assignment problem", European Journal of Operational Research, Volume + 72, 167-174, 1994 + + The format for each of these data files is: + ``` + number of different problem sets (P) + for each problem set p (p=1,...,P) in turn: + number of agents (m), number of jobs (n) + for each agent i (i=1,...,m) in turn: + cost of allocating job j to agent i (j=1,...,n) + for each agent i (i=1,...,m) in turn: + resource consumed in allocating job j to agent i (j=1,...,n) + resource capacity of agent i (i=1,...,m) +``` + + The problems in each data file have an associated notation as + follows: + ``` + c515-1 : denotes a problem of type c with 5-agents and + 15-jobs, problem number 1 in a group of + problems of the same size. + ``` + + The optimal solution values are given below for these + problems when solved as maximisation problems. +``` + + gap1 gap2 gap3 gap4 + c515-1 336 c520-1 434 c525-1 580 c530-1 656 + c515-2 327 c520-2 436 c525-2 564 c530-2 644 + c515-3 339 c520-3 420 c525-3 573 c530-3 673 + c515-4 341 c520-4 419 c525-4 570 c530-4 647 + c515-5 326 c520-5 428 c525-5 564 c530-5 664 + + gap5 gap6 gap7 gap8 + c824-1 563 c832-1 761 c840-1 942 c848-1 1133 + c824-2 558 c832-2 759 c840-2 949 c848-2 1134 + c824-3 564 c832-3 758 c840-3 968 c848-3 1141 + c824-4 568 c832-4 752 c840-4 945 c848-4 1117 + c824-5 559 c832-5 747 c840-5 951 c848-5 1127 + + gap9 gap10 gap11 gap12 + c1030-1 709 c1040-1 958 c1050-1 1139 c1060-1 1451 + c1030-2 717 c1040-2 963 c1050-2 1178 c1060-2 1449 + c1030-3 712 c1040-3 960 c1050-3 1195 c1060-3 1433 + c1030-4 723 c1040-4 947 c1050-4 1171 c1060-4 1447 + c1030-5 706 c1040-5 947 c1050-5 1171 c1060-5 1446 +``` + +The largest file is gap12 of size 20Kb (approximately). diff --git a/tests/GeneralizedAssignmentProblem/gap1.txt b/tests/GeneralizedAssignmentProblem/gap1.txt new file mode 100644 index 0000000..b874331 --- /dev/null +++ b/tests/GeneralizedAssignmentProblem/gap1.txt @@ -0,0 +1,61 @@ + 5 + 5 15 + 17 21 22 18 24 15 20 18 19 18 16 22 24 24 16 + 23 16 21 16 17 16 19 25 18 21 17 15 25 17 24 + 16 20 16 25 24 16 17 19 19 18 20 16 17 21 24 + 19 19 22 22 20 16 19 17 21 19 25 23 25 25 25 + 18 19 15 15 21 25 16 16 23 15 22 17 19 22 24 + 8 15 14 23 8 16 8 25 9 17 25 15 10 8 24 + 15 7 23 22 11 11 12 10 17 16 7 16 10 18 22 + 21 20 6 22 24 10 24 9 21 14 11 14 11 19 16 + 20 11 8 14 9 5 6 19 19 7 6 6 13 9 18 + 8 13 13 13 10 20 25 16 16 17 10 10 5 12 23 + 36 34 38 27 33 + 5 15 + 19 23 24 20 20 25 16 21 24 15 17 17 20 20 20 + 25 24 16 21 19 17 17 19 23 21 21 23 20 15 16 + 16 21 25 22 24 24 16 17 15 18 15 17 18 24 18 + 25 24 18 19 15 18 20 22 23 18 16 19 17 15 22 + 25 19 21 22 20 15 20 19 18 18 17 23 17 25 25 + 16 12 8 20 18 10 12 8 14 23 19 14 15 15 24 + 16 18 19 22 13 20 9 7 25 10 20 13 11 15 16 + 6 20 20 5 14 12 6 15 22 18 13 23 23 18 25 + 18 23 25 17 25 13 23 23 13 20 20 23 17 19 24 + 12 17 15 25 22 5 24 19 12 25 23 21 23 19 18 + 36 37 38 48 44 + 5 15 + 22 21 16 17 21 15 17 22 22 25 18 20 24 15 22 + 23 24 19 15 16 21 15 25 16 21 20 19 16 23 20 + 21 20 21 25 21 20 21 19 17 16 25 19 15 15 15 + 17 21 25 25 23 22 20 19 20 25 15 20 21 25 23 + 15 25 23 19 17 17 25 24 24 17 24 19 18 19 16 + 23 10 15 13 17 10 13 6 9 21 20 7 9 25 8 + 17 13 8 23 11 18 7 22 13 5 24 24 15 10 22 + 22 17 22 23 20 11 17 25 23 9 22 20 15 9 25 + 5 19 25 16 15 10 18 9 11 20 7 21 15 8 25 + 22 9 10 23 19 21 17 15 15 17 25 19 10 9 21 + 32 37 44 35 40 + 5 15 + 15 25 20 18 19 21 18 22 24 15 25 17 17 15 22 + 20 18 25 25 16 24 22 24 17 18 23 25 21 25 24 + 25 19 18 18 23 18 15 22 23 16 25 22 22 15 16 + 19 19 23 17 19 19 22 19 23 22 24 22 25 19 16 + 25 24 17 19 25 19 23 19 25 15 19 21 18 19 22 + 20 20 18 9 18 5 16 18 13 24 21 23 15 19 9 + 5 12 18 8 22 19 19 11 7 19 20 17 21 25 5 + 18 8 8 9 20 20 23 13 15 12 6 12 25 25 23 + 17 19 24 9 16 22 10 17 12 17 15 21 16 18 6 + 14 6 20 6 21 5 11 23 20 21 20 18 13 13 21 + 39 36 37 38 37 + 5 15 + 25 25 18 24 20 19 25 24 23 15 18 18 25 15 22 + 25 18 17 22 21 23 20 23 16 19 15 18 16 23 16 + 18 16 19 15 15 18 15 20 19 24 22 20 25 16 21 + 18 21 16 18 17 24 18 23 22 16 17 22 22 18 16 + 17 18 15 21 23 21 24 23 20 22 19 15 22 22 25 + 16 20 9 22 17 19 20 22 20 13 6 20 23 19 7 + 12 22 18 18 6 13 17 17 17 14 20 12 17 14 22 + 5 19 19 14 24 16 7 8 9 22 13 23 24 15 20 + 20 8 6 9 5 17 23 18 14 12 14 17 15 23 21 + 6 6 24 24 8 7 5 25 21 18 12 20 20 7 12 + 40 38 38 35 34 diff --git a/tests/GeneralizedAssignmentProblem/gap10.txt b/tests/GeneralizedAssignmentProblem/gap10.txt new file mode 100644 index 0000000..ff376ea --- /dev/null +++ b/tests/GeneralizedAssignmentProblem/gap10.txt @@ -0,0 +1,211 @@ + 5 + 10 40 + 17 21 25 19 24 22 24 20 23 15 16 17 23 21 20 21 22 19 24 22 16 + 23 24 16 24 15 17 17 19 19 25 18 21 15 21 23 18 21 19 16 + 16 16 18 15 16 22 20 24 25 23 20 25 15 16 22 19 22 16 23 18 21 + 24 22 22 17 25 15 24 16 16 18 20 15 15 16 24 16 20 17 21 + 25 24 24 18 20 19 25 17 19 19 22 18 19 19 24 22 22 20 16 25 19 + 25 19 21 20 24 20 20 15 24 23 23 17 15 24 20 23 19 19 22 + 21 18 19 21 23 15 17 19 25 25 15 20 18 18 15 21 22 16 25 17 17 + 16 15 17 24 25 24 22 23 24 20 17 20 16 24 18 21 22 20 16 + 23 22 15 17 25 25 24 20 21 23 17 23 21 18 18 22 18 15 15 21 19 + 24 16 19 20 16 23 17 15 24 15 24 19 21 17 16 16 22 16 24 + 19 17 19 24 25 23 19 15 22 23 15 22 19 19 17 16 22 19 20 22 25 + 15 24 24 24 22 22 19 21 23 24 17 23 17 20 22 20 25 19 20 + 17 25 23 21 21 16 18 19 20 19 17 21 23 16 19 23 23 18 24 15 19 + 22 25 21 19 17 25 18 22 21 16 15 20 15 19 24 25 18 15 21 + 15 23 18 15 24 18 16 24 25 24 17 25 21 22 22 18 20 16 16 23 23 + 23 15 24 20 20 18 25 16 22 20 23 15 17 19 16 18 16 16 23 + 18 23 24 21 18 16 18 24 16 21 21 23 25 17 19 20 17 15 23 16 24 + 21 22 15 19 22 22 17 25 21 16 15 21 20 25 21 16 17 15 21 + 21 16 17 18 18 23 18 22 24 22 21 17 24 25 24 15 25 17 15 19 20 + 20 25 25 18 25 17 21 21 15 24 16 24 17 22 15 22 19 24 17 + 9 14 23 14 12 6 15 16 15 12 14 18 9 22 8 23 6 19 6 8 8 + 15 7 16 24 5 18 16 13 13 11 7 19 19 15 21 20 18 11 8 + 21 24 24 19 14 22 9 24 19 24 11 23 18 22 9 9 14 15 21 5 25 + 5 20 13 7 6 8 16 21 22 5 18 10 20 8 9 14 9 5 22 + 18 12 6 14 17 7 24 20 19 10 13 25 23 7 6 9 17 9 6 21 24 + 13 18 5 21 21 15 11 15 15 15 18 21 9 22 8 8 18 13 12 + 23 7 9 13 7 17 14 10 17 9 11 22 25 19 12 5 20 5 24 22 7 + 11 24 19 8 15 9 21 11 9 15 12 18 25 8 14 20 21 22 8 + 7 8 13 10 12 25 7 5 14 17 16 15 10 9 6 16 6 23 23 10 16 + 5 16 11 23 15 6 13 12 21 10 15 21 12 14 14 24 22 13 5 + 17 9 22 8 19 8 7 11 14 14 17 23 25 21 12 20 8 20 9 5 8 + 16 16 23 22 20 17 21 11 12 9 15 21 17 13 18 23 6 8 20 + 14 12 24 12 14 5 24 11 13 21 15 18 14 18 5 11 21 16 5 17 6 + 10 21 11 13 24 13 25 10 21 11 22 11 16 15 17 21 11 21 24 + 22 20 21 12 17 24 21 7 9 23 13 11 19 17 17 20 14 10 11 16 8 + 7 21 16 24 9 16 15 10 23 10 13 9 6 18 23 19 22 13 18 + 6 11 16 17 6 8 18 24 19 9 18 18 7 13 11 20 19 22 19 20 14 + 10 6 6 25 7 8 18 19 17 6 25 13 12 22 23 8 12 5 19 + 7 14 11 6 11 25 18 10 9 10 13 23 12 17 11 14 12 19 20 8 8 + 8 20 25 19 21 25 23 23 11 19 13 21 25 20 22 16 8 24 20 + 44 48 46 47 43 48 49 49 46 51 + 10 40 + 17 17 16 22 24 15 19 21 19 25 25 16 18 19 21 17 15 20 20 15 20 + 17 23 15 16 21 25 18 23 15 22 22 15 24 25 24 21 19 23 18 + 21 20 19 22 20 18 20 17 15 21 16 17 15 21 25 22 24 20 22 20 16 + 25 22 24 25 23 15 25 21 15 16 19 18 23 22 19 16 15 19 15 + 25 21 23 16 16 22 18 25 23 23 23 23 21 18 19 19 19 22 22 20 16 + 25 19 24 18 18 18 16 23 22 25 25 22 24 16 19 25 20 15 18 + 18 16 21 19 25 25 24 17 18 25 20 21 22 23 20 22 25 25 19 22 23 + 19 17 16 16 21 25 21 23 20 20 15 18 21 21 20 17 15 24 22 + 19 18 21 25 25 21 23 15 16 21 18 23 21 24 23 23 20 20 23 24 15 + 24 20 20 19 18 17 21 24 19 19 17 24 17 23 18 25 22 17 25 + 25 17 18 19 25 23 23 17 17 21 24 18 19 15 16 21 24 20 15 25 22 + 16 17 16 24 15 19 17 25 16 25 21 20 17 25 22 15 16 20 15 + 22 24 22 17 21 24 15 23 23 17 16 25 16 17 23 19 17 16 25 24 22 + 16 18 22 17 16 22 15 17 20 25 17 23 23 18 24 15 19 25 23 + 16 25 22 16 25 19 20 22 16 22 23 25 22 18 23 25 20 15 19 20 20 + 17 20 17 21 25 16 17 17 24 18 21 15 17 18 20 15 21 19 18 + 22 16 23 23 17 15 20 23 20 19 22 21 20 16 21 17 19 18 15 25 25 + 15 17 22 23 20 21 19 20 19 17 22 25 20 18 22 16 23 16 21 + 25 24 24 20 18 19 16 22 25 24 19 23 23 19 15 22 20 24 17 24 20 + 23 25 23 18 17 20 18 16 21 21 16 20 15 25 15 25 20 17 15 + 18 9 22 18 13 10 13 15 7 13 13 13 23 7 13 8 18 10 6 19 13 + 19 20 17 24 15 16 23 17 13 18 9 17 17 5 5 16 16 9 17 + 10 10 15 12 15 20 10 8 5 12 13 5 21 18 12 12 16 5 10 13 13 + 9 15 14 21 19 5 23 11 9 21 20 23 9 8 22 13 17 19 7 + 25 19 16 18 15 12 5 17 9 18 23 7 22 9 13 7 20 13 25 13 16 + 25 6 12 10 25 14 23 16 6 22 12 17 7 15 10 25 5 20 25 + 5 5 19 23 22 18 12 12 16 16 9 19 13 11 21 10 12 19 10 17 18 + 8 17 5 13 21 24 9 15 11 10 21 5 14 21 8 9 7 13 11 + 22 24 17 12 14 10 19 11 23 24 12 18 8 18 20 24 18 14 23 24 13 + 15 5 25 11 9 13 20 5 17 15 12 22 12 8 6 7 17 18 17 + 5 9 11 10 18 7 25 24 6 15 21 6 9 9 25 20 5 25 21 24 18 + 21 19 12 21 11 22 10 22 23 7 10 13 5 22 15 17 8 6 19 + 10 18 23 7 14 16 5 25 5 16 21 17 5 12 24 21 19 23 15 15 8 + 21 16 17 16 9 17 25 11 20 24 25 6 20 19 12 19 9 25 5 + 10 13 16 21 17 22 8 23 10 9 21 18 12 6 6 24 13 19 18 9 11 + 13 8 20 24 8 12 10 24 6 25 11 21 21 10 10 16 15 24 15 + 21 17 6 12 22 11 12 6 7 14 19 9 7 18 18 9 25 13 20 22 21 + 5 17 16 12 13 18 18 5 6 24 25 9 17 13 22 23 23 8 15 + 25 19 10 15 22 17 24 7 12 24 6 18 22 22 10 19 15 9 10 18 5 + 24 22 17 9 20 7 14 21 5 22 24 7 20 16 17 7 9 7 14 + 45 43 49 43 49 47 50 47 47 48 + 10 40 + 20 16 15 25 15 16 17 20 22 21 22 18 16 21 24 19 23 15 20 22 23 + 22 16 23 19 17 20 25 21 16 15 17 17 17 19 16 20 16 22 17 + 16 20 19 23 23 18 21 19 22 17 16 20 25 17 18 18 19 15 20 23 15 + 24 24 23 22 18 15 21 17 24 18 17 22 23 21 15 17 16 24 15 + 24 22 15 20 22 20 24 17 16 18 18 22 24 25 20 18 17 15 17 19 23 + 22 20 23 24 18 20 21 23 23 20 23 22 16 25 15 24 20 16 23 + 23 23 25 23 19 21 15 25 20 21 18 15 17 21 24 23 21 16 18 24 18 + 16 23 25 20 16 25 15 19 23 25 22 17 25 24 17 18 17 21 20 + 25 21 21 20 22 15 16 17 17 20 20 22 22 22 17 18 18 20 22 19 18 + 17 25 25 21 15 18 22 18 16 15 25 17 23 18 22 17 24 22 25 + 21 22 18 25 21 15 20 20 21 17 22 15 18 16 18 24 21 18 21 22 23 + 17 25 21 17 24 21 20 22 15 21 20 24 22 22 21 22 16 24 20 + 19 18 20 19 20 20 25 19 20 23 17 16 19 24 17 23 24 17 22 23 16 + 22 21 15 17 19 17 15 19 25 15 22 16 23 21 24 16 24 24 24 + 21 21 21 25 18 25 23 21 25 17 19 25 20 25 15 17 20 23 21 15 24 + 20 15 22 24 15 21 21 25 25 19 22 22 16 16 19 18 21 15 25 + 25 18 22 19 19 18 17 19 21 17 16 24 23 25 17 16 24 19 20 17 23 + 19 20 23 18 18 25 23 18 19 23 25 23 24 22 16 25 23 19 22 + 15 25 23 21 21 21 19 24 23 21 20 16 25 19 20 17 23 22 20 19 16 + 18 19 17 25 17 16 24 24 20 21 25 16 23 16 19 24 17 17 18 + 5 11 18 13 21 19 25 14 9 22 12 20 21 8 20 11 14 10 10 11 23 + 5 21 16 22 6 16 24 18 15 13 10 15 20 7 13 13 24 24 22 + 18 25 6 15 15 17 25 20 9 21 24 18 8 21 23 20 12 10 11 17 17 + 16 12 8 19 19 24 14 12 23 6 17 19 13 21 24 12 13 22 12 + 24 20 14 15 18 14 24 12 9 21 19 20 10 23 8 23 22 6 11 23 9 + 11 12 25 13 21 18 7 16 25 7 24 25 5 21 24 14 10 15 6 + 22 8 11 22 6 6 20 12 13 13 18 18 13 13 5 9 12 22 5 16 11 + 19 7 19 16 7 8 8 24 8 18 19 17 21 24 17 9 23 19 12 + 22 6 21 14 12 20 9 19 15 7 21 25 21 25 11 19 19 25 11 9 5 + 9 15 12 13 10 6 21 13 9 20 23 19 11 20 7 17 20 16 9 + 17 22 24 6 13 15 11 16 20 6 21 22 12 25 14 6 15 12 13 5 14 + 10 5 21 20 23 19 7 5 10 8 13 18 14 16 9 8 9 17 9 + 5 14 25 20 18 13 24 13 22 7 25 13 9 15 9 19 12 8 11 6 14 + 16 25 19 24 11 5 25 24 7 19 20 14 24 11 21 12 6 5 18 + 7 14 5 25 14 20 25 18 14 12 20 18 17 7 15 6 25 5 13 23 24 + 25 13 18 14 18 5 12 20 6 12 8 25 19 19 9 24 8 21 22 + 11 10 24 25 20 21 20 21 11 20 10 9 13 17 21 18 16 6 21 18 21 + 25 11 7 20 21 22 7 15 11 14 15 21 22 10 12 7 14 9 14 + 19 21 20 16 10 25 22 7 6 17 17 22 23 17 20 18 24 24 15 15 10 + 14 11 7 9 23 6 13 23 23 23 20 14 8 10 14 10 21 8 7 + 49 52 51 45 48 44 48 50 50 50 + 10 40 + 15 22 22 22 23 25 22 25 21 23 19 24 18 24 19 22 18 23 21 22 22 + 16 24 16 21 17 25 25 24 21 20 23 21 19 23 19 15 19 18 24 + 16 19 21 18 18 21 21 16 16 17 21 25 19 24 19 19 24 21 17 24 24 + 23 18 19 25 15 22 22 24 23 23 19 19 19 22 19 25 16 24 25 + 19 20 16 21 15 17 22 17 21 20 18 21 21 25 24 16 23 19 19 24 21 + 19 19 24 15 25 16 15 23 22 25 17 15 21 18 17 17 16 16 25 + 18 23 24 17 17 25 24 15 16 22 24 17 22 19 18 18 25 20 18 22 23 + 15 19 15 24 22 19 15 24 15 25 21 22 17 23 25 17 20 19 21 + 19 19 16 22 24 15 20 19 22 20 23 20 18 24 20 16 16 19 18 25 20 + 16 24 22 15 23 18 20 19 18 19 18 23 19 20 23 20 19 21 17 + 23 16 19 15 19 20 21 24 18 22 21 25 25 23 22 23 15 19 18 20 15 + 22 21 25 25 16 17 16 24 22 15 17 20 24 24 18 22 21 18 17 + 22 21 15 25 23 16 24 22 23 15 20 22 15 15 24 21 16 20 20 22 15 + 23 21 23 21 24 24 24 21 16 19 23 18 24 25 21 18 18 20 21 + 21 19 15 20 23 24 16 19 18 20 17 15 21 18 15 16 17 19 18 17 20 + 22 24 15 18 19 18 25 20 21 18 18 15 20 16 17 19 16 21 22 + 21 18 25 15 20 18 15 15 16 25 21 24 16 25 20 21 18 18 25 20 25 + 20 16 20 19 25 15 22 20 19 15 23 17 19 18 23 24 18 19 17 + 19 17 21 19 17 15 23 15 16 20 20 21 23 23 15 18 18 19 24 20 24 + 20 18 15 15 21 16 24 22 16 15 15 19 20 22 23 19 21 24 21 + 25 14 15 6 23 24 7 10 9 11 8 8 11 22 6 14 25 20 20 25 10 + 6 19 13 18 22 17 21 9 15 7 18 20 19 5 19 12 9 17 6 + 7 8 6 23 5 19 18 14 23 10 15 8 7 19 12 25 15 22 6 9 11 + 12 18 21 25 20 8 16 10 13 18 8 24 14 24 6 24 6 7 6 + 13 5 24 5 9 9 22 12 12 20 25 14 9 17 16 18 19 10 15 5 16 + 8 10 12 22 21 11 14 24 20 11 21 18 15 9 19 18 8 10 14 + 9 22 9 21 22 25 17 20 20 25 8 19 24 7 18 5 19 6 18 20 20 + 18 13 5 10 25 20 6 9 17 7 9 13 21 13 9 21 17 11 20 + 7 23 21 13 19 22 25 22 18 5 5 8 8 17 22 14 10 12 11 22 15 + 23 9 15 18 10 15 6 9 8 21 7 16 23 16 12 9 8 5 14 + 12 25 18 22 13 25 22 23 23 11 21 8 20 10 25 18 12 18 5 19 9 + 5 20 16 23 14 13 16 14 25 7 14 23 17 14 9 13 17 15 11 + 5 10 24 22 23 10 15 11 15 8 9 25 15 5 15 10 10 22 17 5 15 + 13 21 23 15 20 11 5 14 11 8 23 8 9 21 18 6 7 15 19 + 22 25 13 14 11 11 24 23 9 12 7 14 20 22 13 16 25 21 13 19 25 + 18 8 5 10 6 5 18 23 25 24 16 6 23 11 21 16 17 20 17 + 7 24 6 7 22 19 9 19 20 23 8 16 25 22 11 12 10 12 9 24 7 + 21 16 7 23 7 6 9 5 13 9 16 10 19 12 15 13 5 15 18 + 5 16 23 12 25 8 10 17 5 11 16 14 23 17 14 19 14 20 22 10 21 + 15 25 17 10 12 16 8 24 8 9 9 17 10 14 8 13 7 14 18 + 46 44 46 49 45 51 44 51 44 46 + 10 40 + 24 18 17 19 19 24 20 23 15 25 21 18 18 18 19 20 25 15 23 21 25 + 21 17 21 22 19 20 17 18 19 16 22 20 21 21 16 24 16 20 24 + 16 16 23 21 25 20 16 25 20 19 24 17 25 24 15 18 25 20 23 15 16 + 19 17 16 15 16 18 19 20 18 21 21 17 22 23 25 22 17 16 19 + 25 19 20 25 20 20 24 20 24 20 23 21 18 20 18 20 22 22 20 15 21 + 17 22 20 24 24 15 21 15 25 18 21 24 17 20 19 20 18 22 20 + 21 24 18 18 17 17 20 17 21 20 18 18 22 23 19 25 19 21 23 20 17 + 21 22 22 18 22 16 16 19 23 15 21 17 18 22 17 16 21 18 19 + 24 16 19 15 23 22 17 23 25 16 22 17 21 22 22 16 20 23 21 25 18 + 16 25 22 18 21 22 24 19 19 21 20 22 25 25 20 25 22 15 22 + 19 25 18 18 24 22 16 22 21 19 15 18 16 22 25 25 23 16 20 18 15 + 23 19 16 19 20 21 17 23 21 18 16 21 18 20 16 16 21 16 16 + 18 16 24 18 17 20 19 24 17 18 24 18 24 22 16 19 23 22 18 21 15 + 15 17 24 18 20 23 21 23 16 19 24 19 15 22 20 25 20 22 17 + 25 24 21 15 20 22 17 17 16 20 24 15 15 16 22 17 22 22 17 20 22 + 20 16 24 17 15 18 23 24 22 21 21 18 21 15 20 18 18 16 20 + 15 18 18 17 21 23 24 24 18 24 18 19 16 25 19 17 19 24 15 19 19 + 19 22 24 15 21 18 19 21 16 20 25 24 24 21 16 23 25 24 22 + 20 24 18 21 20 23 25 17 20 15 21 25 23 16 24 17 17 23 25 20 21 + 23 22 21 17 19 18 23 20 17 17 20 23 23 16 25 21 19 22 18 + 19 8 16 19 11 25 20 5 23 11 20 8 18 5 12 13 12 6 11 8 8 + 23 17 9 18 5 6 23 9 24 24 19 23 13 10 5 11 24 10 22 + 9 22 15 17 7 24 19 19 11 6 17 18 9 23 14 20 7 17 23 7 15 + 8 16 16 9 25 6 5 5 25 7 18 5 18 6 10 8 10 16 18 + 20 22 15 23 25 25 6 5 14 23 11 5 20 6 5 7 8 9 17 6 8 + 13 22 19 5 18 13 20 16 12 23 25 11 19 8 21 9 22 8 22 + 6 7 15 8 11 16 17 14 7 8 20 14 23 13 11 25 5 25 18 5 8 + 20 9 9 25 23 6 15 20 24 7 19 7 6 7 12 5 10 17 12 + 25 12 10 20 12 24 20 14 21 5 20 9 12 13 22 23 14 14 14 25 21 + 5 8 11 19 14 17 15 25 13 14 16 21 8 6 19 7 6 22 20 + 10 16 19 14 9 18 15 10 19 6 10 11 7 23 24 14 12 5 25 16 13 + 8 13 25 9 24 15 6 11 24 14 9 24 6 18 21 20 21 10 10 + 6 8 20 24 9 24 24 10 21 20 12 11 8 24 5 8 10 25 5 6 9 + 8 20 16 14 7 25 11 10 24 17 23 13 16 9 8 5 15 21 23 + 12 5 20 13 21 15 11 15 22 20 13 8 18 20 5 20 14 12 22 15 19 + 7 22 16 15 15 23 19 20 16 10 20 20 11 14 15 12 22 20 22 + 22 24 10 12 19 20 14 16 10 11 9 15 17 25 5 14 21 24 24 19 15 + 10 24 9 14 24 15 16 19 14 14 22 13 17 10 11 6 16 12 9 + 7 8 12 24 12 14 7 11 19 15 20 21 7 5 11 11 6 16 25 14 23 + 13 9 11 15 9 25 14 25 24 25 10 19 14 25 18 21 21 9 21 + 45 44 46 42 49 46 45 51 49 49 diff --git a/tests/GeneralizedAssignmentProblem/gap11.txt b/tests/GeneralizedAssignmentProblem/gap11.txt new file mode 100644 index 0000000..6c7223b --- /dev/null +++ b/tests/GeneralizedAssignmentProblem/gap11.txt @@ -0,0 +1,411 @@ + 5 + 10 50 + 10 25 22 21 24 20 17 21 13 23 16 20 16 16 17 + 20 19 24 21 16 13 20 15 10 11 17 18 24 11 20 17 + 22 11 15 22 22 19 15 15 24 11 20 16 17 20 13 24 + 19 20 24 + 10 17 16 21 16 24 13 18 14 12 18 18 15 24 24 + 15 12 12 11 11 13 14 14 15 12 13 10 11 19 22 13 + 21 24 21 15 24 16 25 23 13 21 12 13 16 18 20 23 + 18 19 18 + 23 25 12 24 16 24 16 14 11 23 14 15 13 23 17 + 12 13 18 16 16 10 15 11 21 13 14 12 18 24 25 21 + 22 18 12 15 14 13 15 21 15 12 10 13 24 25 19 17 + 11 21 10 + 23 10 10 14 25 13 13 11 19 13 24 13 19 19 20 + 18 15 11 10 13 25 12 18 24 11 17 18 22 19 11 21 + 23 25 22 15 22 21 11 17 16 21 24 11 15 14 11 14 + 11 23 17 + 11 18 14 13 20 17 14 21 18 15 12 11 13 15 11 + 23 15 17 24 17 20 15 19 14 16 13 15 19 16 21 11 + 13 14 11 19 17 21 11 18 15 11 20 14 17 14 20 16 + 18 11 21 + 17 10 22 24 12 14 10 21 15 25 17 15 15 14 13 + 16 13 19 12 21 20 15 12 22 20 22 10 16 24 24 15 + 12 24 14 18 23 19 23 20 13 13 22 11 18 25 15 24 + 18 10 19 + 12 25 20 21 22 24 12 22 14 15 15 12 17 17 11 + 23 14 23 14 13 20 22 11 21 19 12 18 24 16 11 22 + 15 11 14 16 18 17 22 16 22 19 17 10 19 12 21 13 + 18 22 23 + 11 18 14 23 18 11 15 19 17 12 18 19 25 24 14 + 17 21 20 21 13 20 11 21 17 18 12 15 17 15 11 18 + 18 16 14 18 24 15 19 16 24 13 23 17 13 12 15 18 + 21 13 18 + 16 24 19 17 25 22 24 15 21 12 15 13 14 22 11 + 24 17 20 13 13 13 17 18 17 14 24 23 22 16 14 18 + 14 17 20 11 21 18 17 24 12 10 19 16 17 11 19 24 + 17 20 23 + 13 23 21 23 24 16 15 15 17 19 22 21 21 24 14 + 10 18 11 24 16 15 19 18 15 15 20 11 24 20 23 17 + 10 10 12 18 22 25 19 22 16 12 11 17 12 19 24 20 + 17 22 23 + 20 16 7 12 15 19 9 23 10 15 20 23 20 20 9 + 16 5 16 14 8 19 18 23 13 12 17 6 14 14 19 21 + 20 11 12 20 24 7 18 11 15 22 6 7 6 8 9 17 + 16 24 18 + 8 11 17 22 7 11 20 9 17 13 12 7 7 13 11 + 21 18 16 17 8 18 10 11 18 13 9 6 11 20 9 14 + 22 8 11 15 23 23 21 15 21 10 10 15 9 21 9 15 + 15 10 16 + 17 22 5 6 7 17 13 16 9 13 19 20 6 10 24 + 24 6 8 7 14 9 11 11 20 20 22 13 6 9 20 9 + 9 16 18 17 8 12 14 18 23 11 14 19 17 21 23 20 + 22 12 19 + 25 13 9 21 10 15 15 20 6 21 17 11 6 8 14 + 23 11 22 14 18 20 17 16 23 16 11 7 23 8 21 6 + 6 5 22 12 21 18 18 10 21 8 23 23 15 20 8 24 + 20 7 12 + 24 11 12 12 7 22 18 14 17 16 10 13 13 12 5 + 15 15 25 6 13 24 6 19 22 18 6 8 22 20 15 11 + 10 10 22 14 18 24 16 14 8 15 16 15 9 7 6 5 + 12 17 18 + 18 21 24 15 15 16 6 6 8 16 10 16 19 23 24 + 24 11 7 12 6 8 15 16 12 25 16 18 12 10 9 23 + 6 19 16 24 17 12 15 12 10 16 11 11 7 17 24 21 + 20 22 18 + 8 20 16 19 16 18 24 10 20 19 17 19 13 18 8 + 21 8 15 12 14 6 20 15 13 22 12 17 15 21 23 8 + 22 17 7 14 24 22 22 19 7 19 17 17 14 8 17 15 + 21 14 8 + 12 18 16 18 7 18 8 16 18 11 15 16 18 9 20 + 22 12 23 16 9 22 16 24 19 6 23 17 15 21 23 15 + 24 7 15 11 23 19 14 13 8 23 23 22 8 15 11 11 + 18 18 11 + 21 21 23 13 11 20 7 10 20 10 18 12 17 25 7 + 20 19 12 18 18 11 22 24 19 10 17 11 19 20 18 15 + 11 19 20 14 5 16 18 9 14 24 8 12 15 19 7 19 + 10 25 20 + 12 18 16 10 19 19 16 8 13 24 8 19 6 8 11 + 23 10 11 22 16 14 17 9 17 22 9 12 7 23 10 5 + 24 6 18 17 18 20 6 16 6 10 5 23 10 19 8 7 + 13 22 6 + 69 69 68 70 72 60 55 58 61 57 + 10 50 + 22 11 13 14 17 24 23 14 15 16 18 18 21 19 20 + 11 11 23 25 15 22 12 23 11 14 12 15 14 21 12 17 + 14 18 16 22 16 21 15 19 17 14 14 24 19 15 15 16 + 18 18 16 + 12 15 24 22 23 15 22 16 22 14 12 24 16 23 17 + 11 19 14 20 15 18 23 17 18 24 14 22 16 14 11 18 + 11 23 10 18 23 19 18 14 12 21 19 19 12 14 13 19 + 13 19 24 + 16 25 18 14 11 14 14 22 23 15 13 14 19 19 15 + 15 20 25 19 17 13 14 20 16 18 21 25 13 10 15 12 + 14 15 15 16 20 13 16 14 15 18 17 11 23 10 24 12 + 24 11 19 + 20 12 11 25 11 24 25 20 20 23 23 23 25 12 11 + 18 16 16 13 15 24 23 16 20 12 18 16 17 12 24 11 + 19 23 20 15 12 18 23 15 16 23 23 14 13 16 16 17 + 19 24 19 + 20 11 13 21 19 11 16 24 22 20 14 17 20 13 17 + 13 18 11 18 16 18 24 11 24 12 25 21 15 13 13 12 + 17 14 24 13 20 17 22 23 10 16 15 20 21 24 15 16 + 15 12 15 + 21 25 20 20 16 10 13 25 20 11 24 13 18 16 25 + 10 14 10 15 21 20 12 11 14 14 10 16 11 17 11 11 + 15 13 20 20 20 12 11 19 18 21 24 18 12 16 19 10 + 16 12 10 + 11 19 16 17 23 10 17 23 15 15 14 16 16 20 20 + 13 15 17 18 15 10 24 17 12 25 13 14 18 20 14 16 + 24 13 11 12 16 18 22 17 22 23 21 10 18 22 15 13 + 21 13 18 + 22 24 11 22 14 21 17 22 21 23 15 20 12 24 11 + 24 21 22 11 16 15 14 19 23 21 15 13 13 23 24 22 + 16 17 21 23 11 19 16 15 16 18 16 19 11 20 25 18 + 17 15 22 + 15 18 13 11 16 19 14 23 13 10 19 22 17 15 23 + 21 16 20 24 16 14 10 14 21 20 13 24 24 19 23 11 + 24 22 14 21 14 10 22 25 11 17 13 20 21 12 14 10 + 25 24 22 + 16 19 16 22 13 12 16 19 22 22 13 19 25 16 16 + 11 13 13 22 22 21 18 17 18 16 13 24 11 13 15 18 + 20 18 18 24 25 15 17 25 23 11 19 21 19 16 13 25 + 14 24 22 + 5 16 18 15 20 23 6 14 23 20 9 14 20 24 7 + 20 22 23 14 8 18 11 16 12 15 21 15 17 14 5 16 + 6 25 22 11 17 9 10 23 12 23 21 6 18 19 9 8 + 18 15 15 + 9 7 17 20 9 18 17 21 10 7 24 17 18 18 23 + 9 18 13 12 15 5 21 12 6 21 8 24 5 13 6 22 + 14 22 10 12 17 25 14 16 20 20 17 6 18 23 15 15 + 20 12 22 + 11 15 12 18 6 15 21 11 19 7 23 13 25 13 10 + 6 12 14 8 15 12 19 20 6 18 7 22 6 8 16 24 + 5 17 24 10 10 14 14 16 10 10 19 22 8 19 11 13 + 13 9 20 + 17 25 10 7 9 6 19 13 21 13 17 16 20 5 18 + 12 7 11 14 12 11 22 22 23 9 8 6 8 20 15 10 + 12 16 21 14 21 22 10 14 13 20 25 6 24 23 25 18 + 24 7 10 + 10 10 23 14 18 15 6 18 17 17 19 13 25 19 16 + 24 21 24 11 20 6 20 24 16 8 19 16 20 24 19 15 + 15 12 12 19 9 15 11 5 10 6 23 22 18 12 25 16 + 12 21 20 + 22 11 14 13 18 16 22 22 19 18 10 19 20 7 16 + 12 22 16 5 7 16 6 10 20 19 9 10 24 8 20 22 + 17 14 12 25 18 7 10 7 18 25 17 20 25 6 19 20 + 25 18 18 + 12 21 15 8 19 8 21 18 16 16 23 5 16 12 20 + 20 14 14 10 21 12 20 14 11 22 21 22 6 24 21 22 + 21 10 9 10 22 13 20 7 7 21 11 22 7 17 22 21 + 12 22 24 + 14 8 18 10 17 18 18 8 11 25 7 11 7 23 16 + 11 17 10 20 14 10 15 9 8 23 13 17 18 18 15 13 + 13 11 25 13 15 17 13 25 18 15 20 25 21 12 11 11 + 8 16 7 + 19 18 13 24 18 22 20 15 9 12 13 6 15 9 21 + 20 15 12 9 12 12 17 10 21 15 15 15 23 20 6 15 + 6 17 9 12 16 22 19 24 8 23 12 10 15 20 24 10 + 19 10 6 + 18 12 25 22 11 22 12 17 16 6 13 11 9 14 11 + 8 13 13 6 19 15 20 16 18 6 11 23 9 24 8 5 + 9 16 24 7 13 20 24 22 18 19 18 18 16 22 10 7 + 18 18 5 + 64 67 72 70 72 61 61 55 60 64 + 10 50 + 12 13 24 19 24 24 15 13 11 20 11 11 23 20 20 + 10 16 14 16 24 22 22 20 12 22 14 15 23 24 24 13 + 10 23 23 24 23 15 24 11 22 11 16 17 23 24 15 19 + 20 12 25 + 19 20 16 18 20 13 17 22 13 24 17 22 24 20 19 + 18 11 18 18 16 12 11 23 17 10 13 14 12 21 24 18 + 24 16 20 12 13 20 19 23 16 24 13 25 12 21 19 10 + 22 18 23 + 15 23 20 16 18 19 23 17 14 16 24 19 20 23 22 + 24 19 19 24 11 19 23 15 15 10 12 11 17 11 22 21 + 23 10 19 18 25 21 22 16 25 18 16 11 11 14 11 15 + 23 18 11 + 14 20 14 21 19 22 18 10 23 16 23 22 17 15 12 + 16 13 21 18 23 22 20 18 16 20 15 16 19 13 22 22 + 20 11 19 25 12 21 23 18 16 21 19 17 16 25 12 14 + 20 12 13 + 20 24 17 14 13 25 20 15 22 12 16 12 20 10 17 + 21 14 13 16 13 22 16 21 19 16 12 19 13 25 13 19 + 16 25 11 13 25 11 22 15 11 13 17 23 13 16 12 18 + 13 21 22 + 24 14 20 11 17 13 20 14 22 12 22 14 16 10 22 + 11 23 22 18 14 19 20 20 25 16 18 11 19 18 14 10 + 11 11 11 25 23 18 15 18 15 18 12 11 19 15 20 17 + 24 20 11 + 14 21 19 23 21 15 19 17 23 17 15 11 15 14 14 + 16 21 19 15 23 15 24 16 25 11 16 13 13 25 16 24 + 16 18 15 17 16 22 23 16 17 12 14 12 15 17 14 21 + 23 20 21 + 21 22 23 23 14 21 11 24 18 23 24 13 24 21 12 + 12 18 22 25 12 24 24 18 21 19 22 20 23 12 20 24 + 24 12 11 15 19 17 14 17 22 15 24 16 23 11 21 24 + 25 23 23 + 22 24 14 16 22 21 18 25 20 17 19 11 21 19 24 + 13 22 15 18 25 21 17 18 25 19 17 20 10 11 20 24 + 11 15 25 18 24 14 25 25 23 14 12 12 21 16 23 16 + 24 12 13 + 16 11 12 20 22 16 25 17 17 25 24 15 19 24 16 + 17 10 24 16 13 20 16 23 20 11 22 22 19 21 14 17 + 11 11 23 11 17 23 15 16 13 14 15 20 20 20 10 23 + 25 24 18 + 17 7 7 24 12 13 6 11 6 17 12 8 16 24 24 + 12 19 16 15 23 17 9 9 7 14 15 20 11 18 19 14 + 18 20 15 13 14 6 18 12 8 20 10 7 7 10 25 20 + 14 9 17 + 10 15 13 21 22 13 15 7 20 13 16 24 25 7 12 + 19 24 6 15 6 23 21 5 21 21 11 15 11 23 10 23 + 19 18 14 14 5 23 24 21 21 5 14 20 20 6 9 15 + 23 16 10 + 19 8 9 19 15 19 12 8 19 6 23 25 22 13 21 + 7 24 10 11 17 9 20 25 20 15 21 10 23 24 6 6 + 6 22 17 9 11 9 18 8 8 15 24 18 7 9 5 18 + 5 7 20 + 19 10 7 8 22 5 16 23 9 17 25 17 7 23 17 + 16 20 11 22 20 16 15 15 14 19 10 19 11 24 10 15 + 21 22 24 8 12 15 18 18 21 5 13 20 7 10 18 10 + 25 18 25 + 17 14 13 19 24 22 11 23 22 24 20 18 13 7 18 + 5 24 15 8 19 23 15 20 5 11 11 12 7 15 16 21 + 15 11 22 19 7 14 14 20 6 11 19 16 14 11 9 25 + 11 15 6 + 13 18 16 20 8 21 5 21 9 18 7 21 24 16 23 + 25 15 22 23 8 5 14 19 16 23 18 6 14 15 7 5 + 21 23 15 12 21 13 7 20 10 18 19 19 18 23 5 11 + 13 18 14 + 13 11 9 6 9 14 10 21 9 9 18 22 11 13 18 + 7 11 17 6 15 21 5 10 16 22 18 13 13 5 16 11 + 8 17 12 5 9 12 11 22 12 8 23 19 7 11 12 19 + 24 8 18 + 15 21 9 8 15 8 10 17 19 22 25 14 7 11 21 + 13 25 18 13 24 5 6 12 7 8 9 13 15 22 18 11 + 8 24 7 7 20 6 22 21 14 9 11 17 12 9 8 5 + 10 15 12 + 20 8 9 13 18 16 25 9 16 7 10 20 23 24 13 + 20 16 18 18 15 18 9 19 15 19 6 14 7 25 12 20 + 15 17 15 24 9 24 7 12 24 6 22 20 23 19 15 20 + 11 14 21 + 5 16 7 6 13 24 16 17 9 15 8 17 20 18 9 + 16 21 24 14 22 23 19 9 11 11 5 8 24 12 22 20 + 23 14 19 5 14 7 23 12 22 9 19 8 21 13 18 19 + 6 6 21 + 67 70 77 74 71 56 62 57 63 60 + 10 50 + 20 14 17 16 12 13 23 25 12 14 24 20 22 13 11 + 11 17 21 14 14 19 17 11 17 14 15 16 11 19 16 21 + 19 20 23 17 12 16 17 24 11 19 22 18 14 11 23 16 + 13 23 12 + 17 11 13 13 14 16 18 13 25 25 25 16 14 11 18 + 12 24 17 16 18 10 16 21 24 18 11 22 10 17 19 20 + 24 23 11 13 13 12 15 14 15 12 22 18 23 13 12 11 + 25 13 11 + 20 15 11 25 21 11 13 11 24 24 14 19 13 12 11 + 12 25 21 12 15 19 19 18 14 12 24 23 11 17 10 17 + 23 16 23 15 10 20 12 10 21 11 25 21 18 10 18 24 + 13 15 24 + 19 18 20 20 17 18 10 15 12 15 11 19 17 24 11 + 24 11 23 21 25 22 23 22 21 15 14 11 22 18 16 16 + 11 12 19 22 15 18 16 13 22 17 17 21 15 21 12 16 + 12 16 11 + 13 23 20 15 20 21 11 21 14 24 18 22 25 15 16 + 12 22 15 17 10 24 21 21 18 17 11 24 23 11 17 23 + 24 15 15 18 21 13 13 20 10 11 10 17 24 21 14 21 + 18 22 15 + 14 16 14 16 19 19 16 14 12 23 11 18 25 24 25 + 14 20 23 24 16 11 16 16 15 10 12 17 17 11 15 24 + 14 20 14 12 23 20 17 21 25 22 15 22 20 17 19 19 + 18 11 13 + 11 13 21 15 14 23 11 20 13 24 13 12 11 12 19 + 10 23 14 23 15 19 16 23 15 24 13 19 18 22 16 24 + 22 12 24 12 16 13 11 16 22 12 21 18 15 22 12 18 + 15 13 16 + 11 10 16 18 13 21 16 19 25 21 24 12 14 12 17 + 20 10 12 12 23 20 12 22 25 23 14 19 22 24 22 11 + 24 18 14 19 19 22 23 14 24 21 14 19 16 23 14 22 + 16 18 18 + 24 21 21 19 21 15 16 10 12 17 18 18 21 20 18 + 15 24 13 12 15 16 22 12 11 25 14 23 15 12 18 25 + 11 20 23 25 17 21 15 17 20 20 17 25 11 12 16 19 + 17 23 11 + 11 16 15 15 17 22 22 21 13 16 15 11 18 23 17 + 23 16 23 25 15 12 12 22 17 11 15 19 24 22 15 21 + 12 14 23 12 13 22 17 19 24 21 14 23 22 19 12 21 + 12 21 15 + 5 22 22 15 13 22 6 20 17 16 6 22 18 22 9 + 21 22 23 21 6 9 18 12 9 5 24 24 21 6 8 17 + 7 13 12 11 23 5 12 15 25 20 8 6 10 12 15 7 + 11 9 8 + 16 19 17 23 9 6 22 18 17 18 12 15 12 24 10 + 23 16 25 16 16 22 7 14 23 6 17 9 9 8 6 7 + 15 10 17 8 15 22 7 20 11 9 6 20 9 18 5 15 + 5 12 19 + 17 16 20 16 22 21 13 20 9 18 20 24 16 20 15 + 5 18 5 18 24 9 23 7 11 25 17 12 16 6 16 22 + 7 21 6 16 21 11 23 8 5 12 24 8 8 15 13 21 + 8 16 18 + 15 12 20 23 9 22 14 9 17 15 10 11 8 23 13 + 17 7 17 15 16 15 8 19 6 11 8 15 20 13 11 10 + 12 11 12 22 11 13 18 7 6 13 23 23 18 17 10 18 + 17 13 23 + 17 21 18 11 19 24 11 23 15 7 14 13 18 6 18 + 19 15 8 17 5 20 18 16 15 10 21 16 24 25 17 23 + 22 20 9 15 13 15 18 15 15 22 12 6 16 19 23 24 + 25 10 23 + 23 16 24 21 14 24 11 8 7 16 16 13 19 6 7 + 11 24 19 20 24 13 23 19 25 17 12 9 11 6 20 19 + 23 14 12 21 17 22 23 11 7 8 11 17 17 25 14 10 + 7 21 21 + 12 20 15 17 21 8 17 9 9 19 6 21 5 13 17 + 18 17 8 11 7 17 14 6 6 18 21 13 12 18 14 19 + 11 19 10 5 19 8 22 18 14 17 23 14 5 16 22 18 + 20 13 10 + 9 14 14 24 11 9 14 21 21 21 8 18 23 21 25 + 11 24 16 24 6 15 24 14 6 25 9 8 24 12 25 23 + 11 19 9 8 10 11 18 6 12 12 20 6 11 10 22 24 + 11 8 21 + 6 16 24 8 7 11 22 21 7 19 6 19 17 12 22 + 22 25 22 19 22 15 17 19 21 7 16 8 6 9 14 12 + 10 14 6 22 5 7 5 14 6 9 19 19 11 16 5 16 + 8 6 8 + 8 18 10 17 18 10 16 20 17 6 23 15 5 8 6 + 9 8 23 8 18 16 15 14 23 11 24 16 23 14 8 25 + 17 17 21 18 22 17 11 17 14 11 7 18 23 16 17 24 + 5 12 21 + 69 66 71 70 70 56 56 60 57 66 + 10 50 + 11 25 12 25 16 16 25 23 20 18 10 23 24 18 25 + 13 21 24 14 22 23 21 12 22 15 14 14 21 15 12 11 + 12 17 25 12 18 18 11 16 22 18 17 22 24 12 16 22 + 13 18 12 + 17 20 24 23 16 21 14 24 12 20 22 14 23 12 23 + 25 11 11 13 10 23 24 15 17 16 14 21 19 18 10 11 + 24 21 24 12 20 14 15 15 21 12 22 18 15 10 10 22 + 11 16 19 + 12 14 23 15 20 22 21 12 13 19 20 24 12 11 23 + 20 17 14 25 24 18 15 14 21 12 20 13 24 13 12 20 + 23 12 14 23 24 21 16 10 24 14 21 19 19 19 22 24 + 20 14 22 + 13 22 11 16 25 18 24 10 15 19 19 20 25 20 23 + 20 20 16 16 14 21 22 12 19 13 11 24 22 19 22 21 + 23 21 19 21 11 23 12 14 14 20 25 20 20 12 11 19 + 24 13 16 + 18 22 18 15 21 12 22 15 24 14 21 25 16 11 17 + 15 11 11 17 14 15 21 22 17 17 23 20 14 24 23 16 + 18 24 24 18 23 22 16 23 18 24 21 19 24 20 13 16 + 20 20 18 + 14 14 15 20 12 21 12 17 13 24 11 19 15 21 22 + 22 11 12 14 21 25 14 21 12 15 24 12 23 22 18 11 + 12 25 16 11 22 23 13 11 14 13 12 21 25 24 19 16 + 24 24 22 + 13 11 19 21 12 13 10 15 25 14 17 23 10 25 14 + 10 12 25 22 12 19 24 20 23 11 23 17 21 11 15 25 + 16 14 11 15 18 12 19 18 18 17 17 21 17 11 22 15 + 15 13 16 + 24 22 18 23 13 14 14 11 15 14 21 14 17 12 19 + 15 17 16 22 21 11 17 23 15 19 17 24 23 25 21 20 + 18 20 11 11 13 21 18 11 15 16 23 10 16 11 16 15 + 25 19 16 + 15 17 11 18 23 10 16 16 23 12 20 21 25 23 16 + 12 10 23 22 22 17 23 21 11 12 22 21 13 14 19 20 + 15 17 16 18 14 16 20 14 21 12 14 19 15 16 12 17 + 12 20 25 + 15 24 11 21 22 21 16 13 16 22 11 24 23 21 25 + 15 11 19 24 15 13 16 21 18 12 17 18 12 24 21 24 + 13 23 22 21 20 13 12 23 14 18 23 15 13 13 12 12 + 20 11 11 + 11 7 14 25 13 19 7 19 7 18 11 14 15 15 5 + 6 5 17 8 16 12 25 19 20 10 23 6 6 24 16 7 + 21 17 14 13 11 25 6 24 17 14 19 22 13 7 18 14 + 21 14 8 + 20 10 24 17 18 12 20 22 8 9 8 16 12 6 12 + 22 8 22 11 10 13 9 9 17 11 9 15 21 24 17 10 + 10 18 20 15 12 20 14 25 21 22 23 6 19 15 20 25 + 15 10 11 + 22 8 19 10 6 12 8 19 13 13 18 5 24 22 13 + 18 19 13 23 23 23 15 16 23 9 10 15 22 20 16 23 + 22 19 25 5 16 20 14 13 12 18 19 21 20 6 9 23 + 14 25 17 + 15 13 13 8 8 18 20 25 22 18 22 16 11 23 13 + 16 18 8 10 16 19 9 8 7 23 20 18 13 21 11 25 + 10 10 6 7 18 6 12 22 20 18 22 8 5 19 23 24 + 10 17 24 + 17 19 13 10 10 17 8 11 22 13 19 18 22 12 9 + 20 20 15 9 19 6 23 13 5 11 8 23 5 7 20 24 + 5 19 15 8 15 7 19 16 17 9 11 18 12 21 10 21 + 23 21 12 + 19 22 23 24 18 17 16 21 8 17 9 5 9 8 22 + 9 10 14 5 10 25 5 8 22 22 17 8 5 18 7 24 + 13 22 19 5 24 19 5 23 9 9 23 22 8 24 18 21 + 18 18 11 + 23 7 20 15 6 9 16 7 5 25 7 16 10 18 13 + 6 14 19 17 18 15 8 22 20 10 8 5 10 14 17 11 + 11 14 18 6 12 8 24 13 19 12 7 13 8 7 21 6 + 15 7 20 + 8 6 11 15 21 18 18 11 16 15 25 7 14 22 8 + 23 23 6 19 17 22 21 11 11 7 16 8 22 11 19 13 + 7 7 8 9 5 6 14 16 22 24 16 10 20 8 11 6 + 16 8 11 + 21 16 18 12 9 22 6 6 20 9 7 10 19 17 24 + 6 8 10 14 17 20 12 7 15 13 11 22 6 6 23 15 + 8 18 8 15 22 19 24 15 22 14 21 7 21 23 16 25 + 8 25 19 + 6 7 7 13 6 7 7 8 19 15 18 25 14 24 11 + 15 9 8 16 6 16 6 8 17 13 7 14 17 16 13 11 + 20 12 6 18 6 19 9 23 5 21 23 25 14 19 16 20 + 20 18 18 + 69 66 68 68 69 57 61 65 61 58 diff --git a/tests/GeneralizedAssignmentProblem/gap12.txt b/tests/GeneralizedAssignmentProblem/gap12.txt new file mode 100644 index 0000000..4b483ad --- /dev/null +++ b/tests/GeneralizedAssignmentProblem/gap12.txt @@ -0,0 +1,311 @@ + 5 + 10 60 + 25 18 15 16 18 25 19 18 25 23 19 25 19 21 24 16 18 23 18 17 25 + 20 24 21 17 19 24 25 17 19 19 25 20 17 21 20 20 17 19 25 25 19 + 23 24 20 16 21 24 17 15 17 19 15 21 25 16 21 20 24 22 + 21 21 15 23 23 22 20 22 21 24 20 19 23 24 23 23 22 22 15 18 20 + 19 20 24 22 20 20 20 20 17 20 24 18 19 22 17 21 17 19 17 22 22 + 18 22 20 17 19 15 15 19 23 22 24 23 17 21 25 23 20 19 + 21 17 24 17 24 15 22 24 20 18 21 23 19 24 23 22 22 21 16 18 21 + 22 25 22 17 25 22 22 24 22 25 20 16 19 23 20 18 23 23 19 19 21 + 17 22 15 16 23 24 17 22 23 18 24 16 20 25 19 17 22 21 + 21 20 22 15 23 24 25 22 18 16 23 24 20 21 15 21 17 20 24 22 24 + 25 16 17 18 20 25 18 24 24 24 22 19 20 15 20 17 19 16 23 15 22 + 22 24 15 16 20 17 21 24 24 24 24 25 19 24 25 16 22 19 + 24 23 22 19 18 16 23 18 22 24 25 16 23 21 17 18 19 17 25 17 18 + 23 24 18 24 23 23 15 19 18 24 19 19 24 24 24 15 21 21 24 24 19 + 23 24 21 23 24 22 18 19 24 15 17 17 25 17 24 16 19 21 + 16 21 19 22 16 16 17 23 25 16 18 22 15 25 20 15 18 23 22 16 17 + 17 16 24 24 16 17 23 19 23 15 17 24 19 24 24 24 16 22 16 18 23 + 23 20 16 25 23 17 18 23 24 19 22 19 19 18 21 21 22 17 + 23 23 19 18 19 19 21 24 22 16 17 25 24 17 23 17 20 25 25 22 17 + 24 17 17 23 23 16 17 19 19 23 24 17 25 18 19 18 16 17 17 24 23 + 17 19 15 23 22 17 23 21 15 19 18 22 23 16 16 22 16 21 + 24 16 15 25 16 15 20 20 22 18 21 19 21 19 17 17 17 22 25 17 20 + 25 15 17 20 16 23 20 23 22 23 15 21 24 21 23 19 24 17 24 25 18 + 24 21 20 18 22 15 16 18 23 24 25 20 20 21 17 15 24 21 + 18 18 18 19 18 24 22 19 25 15 16 23 17 16 18 22 21 18 21 18 20 + 18 16 24 17 22 24 18 22 18 24 23 23 25 20 23 18 22 21 18 24 17 + 15 25 23 16 22 24 18 21 16 24 22 18 25 23 23 18 16 22 + 16 18 19 18 18 24 24 23 25 16 20 22 25 16 20 18 19 24 24 25 22 + 23 23 24 18 24 16 21 17 22 22 16 15 17 19 23 15 19 22 22 23 23 + 16 20 22 24 20 20 23 16 24 17 22 17 19 25 16 16 19 16 + 17 25 6 14 16 12 19 19 5 16 23 16 15 22 19 10 25 7 24 9 7 + 24 22 23 10 25 21 16 13 17 9 6 16 23 11 22 14 22 5 14 9 19 + 24 16 6 21 19 11 22 22 19 24 12 20 15 17 21 17 25 19 + 6 24 12 24 14 22 11 10 25 12 20 17 18 22 11 15 20 20 21 12 5 + 5 25 15 24 17 7 21 11 12 24 16 12 5 9 11 14 7 14 9 13 7 + 25 12 6 10 7 15 13 22 6 10 5 21 5 16 16 13 5 23 + 21 21 7 5 20 16 9 14 22 12 9 8 14 17 22 9 17 8 12 15 24 + 19 6 8 16 14 14 23 14 23 5 21 17 25 13 23 23 12 20 19 16 15 + 22 19 18 7 5 20 19 9 23 14 14 11 20 15 25 17 12 13 + 22 14 19 7 5 20 19 5 20 7 12 8 13 18 16 9 23 16 16 9 25 + 8 13 16 6 8 5 18 12 5 12 16 12 25 5 24 23 23 25 22 17 17 + 21 24 16 7 17 9 13 24 22 25 25 23 12 12 8 24 14 8 + 17 10 18 13 14 18 6 6 11 9 12 20 15 12 18 18 11 7 9 25 13 + 9 10 9 15 10 19 15 15 14 25 6 12 21 9 10 18 20 13 17 17 21 + 15 9 22 11 14 14 13 16 12 5 14 18 24 9 19 14 9 24 + 24 23 6 13 9 17 18 21 10 15 15 18 14 15 11 24 20 24 16 20 23 + 25 9 21 21 13 9 24 12 8 14 21 16 25 20 23 8 16 20 10 5 16 + 11 20 10 11 21 15 12 12 21 10 19 18 10 25 23 16 8 25 + 5 21 24 13 21 11 18 12 24 22 20 21 16 18 8 25 7 19 11 12 18 + 5 15 7 12 5 23 16 12 5 8 24 25 10 13 24 22 20 12 16 18 9 + 21 17 19 6 21 12 6 9 24 10 8 13 13 13 23 25 8 22 + 9 19 23 7 5 8 16 17 21 15 15 12 21 24 15 6 7 11 5 13 10 + 16 19 9 22 8 21 17 7 8 25 23 20 8 14 16 5 16 5 10 17 6 + 18 9 19 9 11 18 23 14 24 13 20 10 22 19 6 15 18 15 + 23 15 16 20 19 23 8 15 24 25 25 5 13 14 12 25 5 11 23 24 18 + 7 17 10 25 21 13 19 18 6 8 9 21 18 5 12 8 7 19 24 7 9 + 22 7 9 10 14 24 22 24 15 16 11 19 18 18 16 8 6 8 + 10 14 24 13 18 11 13 24 22 7 12 17 23 12 15 5 5 16 20 22 18 + 12 20 12 9 5 7 6 25 6 7 13 7 23 21 21 18 8 23 7 11 9 + 15 19 9 13 22 24 18 14 11 15 15 18 22 13 17 14 11 11 + 79 67 74 73 67 78 73 68 73 69 + 10 60 + 16 25 25 19 16 20 16 16 18 16 18 16 21 18 17 20 16 18 19 15 19 + 17 15 25 22 24 19 22 15 25 19 20 18 25 24 20 23 21 24 19 18 25 + 21 18 22 15 15 24 17 24 21 19 18 24 18 17 23 24 16 21 + 20 20 21 18 23 15 20 25 17 15 23 15 18 24 18 22 20 24 15 24 24 + 18 18 21 19 16 25 16 21 21 17 25 15 24 25 21 23 19 23 19 25 23 + 25 23 16 18 21 23 21 15 24 21 20 21 22 16 23 21 24 22 + 25 19 17 21 20 23 22 22 20 15 17 25 19 24 19 15 18 15 25 23 15 + 15 23 20 18 22 24 19 24 15 18 15 15 23 25 19 19 19 20 24 22 25 + 21 15 16 22 23 15 15 24 24 15 18 24 20 25 18 16 17 15 + 18 25 20 19 16 20 16 19 16 17 23 23 16 17 16 24 21 23 24 17 23 + 16 15 23 21 17 23 23 17 24 24 21 19 24 23 25 18 17 19 17 17 20 + 21 24 15 24 25 24 23 15 23 18 22 16 23 16 21 17 21 25 + 16 20 24 17 17 23 17 17 17 18 22 24 23 23 20 23 15 21 25 17 15 + 18 19 21 23 18 21 21 24 18 21 15 20 23 23 23 23 19 16 24 22 20 + 22 19 24 24 18 25 23 15 18 23 22 17 23 17 25 19 25 18 + 19 15 22 21 21 17 15 24 15 24 25 21 25 19 17 23 21 20 16 24 24 + 23 24 23 16 23 20 20 17 17 19 19 15 19 23 19 19 22 20 15 23 19 + 24 19 25 23 18 15 15 15 15 19 16 19 24 17 17 22 17 15 + 23 24 16 18 24 23 16 21 21 19 15 22 24 18 17 17 16 22 18 16 17 + 20 19 16 19 18 17 16 20 18 18 18 19 18 17 16 16 18 25 25 19 25 + 24 21 25 22 22 18 18 16 15 21 15 17 22 23 15 19 19 18 + 17 23 23 23 16 17 23 19 17 25 16 20 24 22 17 19 25 17 24 18 18 + 20 23 20 18 24 18 18 18 17 21 22 23 24 17 20 21 19 16 19 15 21 + 19 24 18 22 24 15 16 21 24 25 17 22 17 22 15 18 19 16 + 16 25 24 17 15 25 16 15 16 25 25 20 19 20 15 18 17 23 22 15 25 + 19 22 22 16 17 18 24 21 19 22 23 25 15 25 24 25 15 15 24 20 24 + 25 20 15 25 22 17 21 23 25 17 16 23 20 19 23 24 20 20 + 19 20 15 18 23 21 20 23 15 24 25 24 21 20 21 25 19 15 20 21 22 + 15 25 24 18 16 16 22 23 20 21 22 15 21 18 19 22 18 23 25 18 16 + 20 20 15 25 18 23 17 22 24 23 22 20 21 18 19 20 22 24 + 5 5 6 14 22 22 18 5 6 15 18 23 17 8 8 25 13 24 18 14 6 + 13 11 13 14 7 11 9 20 8 6 8 15 9 9 19 22 21 8 12 6 11 + 7 20 11 23 14 19 23 20 10 6 16 13 24 24 10 20 14 16 + 11 11 14 11 8 15 17 18 19 5 10 23 15 10 12 6 11 22 19 12 22 + 12 7 7 21 9 7 20 11 19 6 20 22 5 14 21 15 17 17 19 5 22 + 5 5 17 24 12 16 19 11 6 12 24 18 24 23 13 11 20 19 + 6 21 24 14 12 18 23 25 10 10 7 7 25 17 24 8 17 5 8 24 6 + 13 15 17 14 5 25 5 19 20 15 18 16 9 7 18 6 7 10 6 25 24 + 6 7 15 18 13 13 22 20 19 7 17 5 18 18 9 16 20 17 + 24 15 16 25 21 16 5 15 21 23 15 23 13 19 18 13 16 7 11 20 5 + 17 21 14 14 7 10 17 22 6 21 18 7 19 8 16 21 24 20 8 16 14 + 10 24 14 9 24 12 23 15 8 25 6 13 25 6 15 21 5 17 + 20 16 20 6 25 16 19 20 12 7 24 13 14 18 22 20 17 21 6 13 13 + 25 19 25 19 7 24 5 24 17 25 15 14 10 8 13 5 20 17 22 18 7 + 5 24 23 10 13 22 16 15 9 13 11 24 7 14 18 11 17 6 + 13 23 15 5 21 17 16 16 18 18 19 5 19 21 24 7 16 6 19 14 15 + 15 8 25 6 24 8 18 10 17 13 19 20 8 8 16 11 18 17 15 18 8 + 6 21 12 15 12 21 22 17 20 20 20 16 6 11 17 12 19 11 + 18 21 16 19 21 11 21 22 12 14 20 19 19 7 7 8 19 21 22 11 8 + 8 12 12 7 5 5 23 8 11 15 11 24 9 21 18 25 10 19 19 10 13 + 21 5 15 16 5 22 12 24 24 18 24 14 6 9 10 15 25 20 + 8 13 20 9 19 15 12 25 8 18 20 12 25 17 15 7 15 9 23 25 6 + 20 5 9 21 16 21 10 22 10 17 25 7 21 18 5 25 14 25 13 17 11 + 8 17 18 13 9 20 5 12 19 16 14 15 8 22 22 11 14 16 + 18 24 15 20 8 12 11 23 24 8 23 15 24 22 17 17 8 13 18 6 21 + 13 9 18 8 16 16 12 25 20 24 9 21 18 17 9 25 17 20 12 18 17 + 15 10 19 11 8 9 18 5 17 23 14 17 6 13 20 23 12 23 + 13 10 21 6 18 23 9 24 9 10 5 12 19 11 24 6 21 14 10 22 18 + 22 12 6 15 25 21 15 13 17 24 12 13 12 20 13 18 24 11 6 9 17 + 21 18 24 15 16 14 24 10 11 16 5 25 21 16 24 12 24 13 + 66 69 69 74 75 72 72 72 76 75 + 10 60 + 20 22 15 15 25 20 18 17 17 22 16 19 24 22 25 17 15 16 22 19 21 + 16 17 17 15 24 25 23 23 17 25 19 23 17 21 17 24 24 16 15 18 18 + 23 23 15 18 23 22 18 17 19 24 25 16 18 18 15 21 23 17 + 17 22 15 18 17 17 24 21 21 16 19 22 21 19 18 19 23 19 15 20 16 + 20 18 19 18 16 19 23 20 24 18 15 15 17 18 17 18 25 21 22 18 22 + 24 22 16 17 23 17 22 22 23 23 19 15 22 15 24 22 18 20 + 18 15 24 22 20 15 19 15 23 17 15 17 23 21 20 15 18 20 25 23 21 + 23 17 22 15 21 16 25 24 18 25 18 16 19 19 17 15 16 17 19 22 24 + 24 21 20 20 22 17 19 18 16 16 25 17 15 24 15 17 24 23 + 18 22 24 23 18 22 24 17 20 22 23 24 18 21 16 16 22 21 17 19 17 + 15 20 15 19 20 18 16 23 23 20 19 20 18 23 16 18 16 24 25 20 20 + 22 15 21 23 21 19 16 22 20 15 18 23 15 23 19 17 24 16 + 22 19 20 24 25 15 17 25 17 15 24 16 17 23 24 23 20 20 18 18 23 + 19 17 24 18 15 22 17 24 25 23 19 21 15 24 19 24 20 17 25 20 22 + 25 24 19 23 21 20 17 17 16 18 16 17 15 24 23 21 19 21 + 15 21 16 22 21 15 18 17 17 16 24 20 15 15 21 23 19 17 15 22 25 + 25 16 16 16 20 17 15 19 21 16 25 24 23 22 24 20 19 24 21 19 18 + 23 20 15 21 20 15 22 23 15 24 23 23 17 25 21 23 18 18 + 24 16 16 23 16 19 25 20 20 19 21 23 24 18 24 24 21 18 25 22 15 + 15 16 23 17 21 23 21 19 24 16 15 19 25 21 17 15 23 16 25 23 25 + 25 19 22 22 22 25 23 20 23 25 16 24 18 20 23 22 20 24 + 23 20 24 16 17 18 16 16 24 25 23 25 15 17 23 16 21 18 17 23 16 + 22 15 21 16 25 24 19 15 18 19 17 16 19 16 22 22 18 24 24 21 25 + 15 21 16 20 16 17 24 16 25 23 21 19 16 17 19 17 15 21 + 19 21 22 17 15 20 25 24 16 20 19 25 24 25 19 19 21 19 25 20 23 + 15 22 21 16 16 21 23 25 22 22 23 19 15 25 18 15 19 19 21 15 17 + 16 21 19 18 24 24 24 22 20 18 19 25 16 25 18 17 22 23 + 19 19 22 19 17 17 23 25 22 17 19 18 19 16 23 22 24 17 18 20 24 + 24 23 25 17 23 16 22 16 17 25 18 21 19 22 25 22 17 18 16 21 23 + 23 25 18 19 15 21 19 22 18 19 23 17 16 17 19 16 23 21 + 23 17 23 17 10 23 21 14 11 17 16 16 21 20 9 24 15 6 23 15 22 + 7 14 5 7 20 10 22 8 9 23 24 6 11 25 20 22 5 9 13 25 5 + 18 8 10 15 23 21 18 23 11 6 8 11 12 12 8 14 10 19 + 12 15 10 24 25 16 21 25 9 10 18 14 17 22 7 15 15 18 18 24 25 + 19 13 22 15 7 23 12 8 5 16 8 24 23 19 7 13 9 23 5 10 8 + 8 25 19 10 11 16 16 20 22 25 17 23 15 9 18 13 11 8 + 18 10 24 25 13 10 24 12 25 21 17 13 5 18 25 8 16 12 7 23 8 + 24 15 14 22 7 20 21 16 17 15 23 22 16 11 12 20 21 14 8 21 10 + 5 7 21 14 8 9 21 25 8 14 7 17 13 12 16 7 21 6 + 20 25 21 7 5 25 7 19 12 15 25 11 8 6 25 12 9 22 5 13 18 + 25 19 6 15 7 14 18 8 22 8 10 9 8 19 16 7 13 10 7 11 8 + 5 11 23 6 10 24 15 22 8 12 11 16 16 11 12 16 16 6 + 12 11 21 21 15 10 11 10 24 20 20 9 11 21 14 12 17 12 5 17 22 + 20 23 17 10 5 19 5 17 22 17 12 19 14 21 17 18 21 6 16 14 13 + 10 11 15 8 7 21 18 12 11 21 15 6 14 25 6 12 24 20 + 21 7 11 6 14 8 5 5 9 24 20 25 17 8 7 5 19 5 8 21 7 + 8 11 24 19 17 16 16 7 17 23 8 20 13 14 16 25 19 19 15 21 13 + 19 12 9 20 24 5 9 10 7 18 10 24 17 11 5 25 12 25 + 18 20 23 17 16 23 24 21 6 22 7 21 24 10 24 12 9 9 21 21 14 + 5 7 23 25 23 14 6 5 8 13 25 13 11 23 17 17 9 20 21 21 15 + 7 14 18 5 20 20 23 21 12 18 7 20 10 24 16 15 9 19 + 20 12 20 21 6 5 25 19 12 5 25 8 25 15 5 7 21 14 10 13 5 + 5 8 5 15 8 24 15 8 5 10 21 10 16 23 17 19 19 9 18 8 5 + 23 20 13 16 6 5 21 8 22 18 9 21 19 18 14 7 25 5 + 19 10 23 5 8 15 21 17 16 6 16 6 19 10 7 11 14 20 24 18 22 + 22 14 6 10 9 11 17 7 14 23 6 16 16 13 18 15 13 9 23 16 18 + 18 7 21 20 24 25 16 18 21 12 20 21 13 16 22 15 18 24 + 21 22 5 14 23 8 21 9 25 23 7 23 5 25 18 18 24 23 20 16 21 + 21 12 17 12 19 22 22 14 19 17 19 15 22 17 9 18 12 8 21 14 17 + 6 12 13 6 25 23 19 13 25 25 5 17 7 25 25 23 7 19 + 72 74 73 64 71 68 76 66 74 81 + 10 60 + 18 20 17 17 22 24 25 24 18 24 20 21 22 17 20 21 23 21 19 25 19 + 21 21 25 23 21 23 18 19 20 25 23 18 22 20 20 15 17 22 15 15 18 + 16 17 20 23 23 24 21 16 22 15 24 23 23 25 17 18 17 19 + 17 19 16 19 25 21 24 23 23 22 15 20 25 24 19 21 20 19 15 22 20 + 20 22 18 16 25 25 18 17 25 16 18 16 17 20 25 21 17 22 15 20 18 + 17 19 15 21 16 16 23 19 25 22 20 17 23 25 20 18 22 20 + 20 17 16 24 25 24 16 20 25 20 16 22 20 25 15 17 21 16 22 24 17 + 16 16 17 18 17 17 18 19 23 25 15 19 20 17 16 20 19 21 17 18 24 + 20 15 23 23 19 25 22 25 24 25 16 23 25 16 18 18 22 25 + 22 17 22 23 19 16 22 19 21 24 17 25 15 15 18 17 24 19 21 15 17 + 23 21 15 22 21 23 18 15 15 21 20 21 21 19 22 23 20 18 17 24 17 + 15 19 16 15 23 20 15 18 25 15 20 22 21 15 24 25 21 24 + 23 24 25 25 15 20 20 25 21 17 21 20 20 24 23 22 23 16 21 25 25 + 21 17 19 21 24 22 25 16 25 19 24 21 22 22 20 20 22 16 24 15 21 + 21 22 21 18 20 16 15 20 22 19 17 16 25 25 21 17 23 18 + 15 24 16 16 15 22 18 20 24 19 22 18 24 22 22 16 22 16 21 16 21 + 24 17 23 22 20 17 23 19 23 20 21 18 22 16 15 22 15 22 16 21 25 + 17 18 19 23 22 22 25 19 21 25 23 16 21 15 19 15 21 22 + 18 16 19 22 20 15 18 21 22 19 20 22 17 25 18 20 16 24 21 23 23 + 15 16 23 20 22 17 21 23 17 20 23 25 16 17 22 25 24 24 24 19 15 + 23 19 17 18 18 24 18 19 19 21 21 18 19 17 23 20 15 18 + 18 22 18 24 23 16 21 23 20 20 16 24 24 18 19 15 22 22 15 23 21 + 23 25 24 18 16 17 19 15 19 18 19 22 21 22 16 15 16 15 21 16 20 + 19 18 24 24 16 23 16 15 19 20 19 17 17 24 20 23 18 18 + 15 15 23 15 19 23 22 18 22 17 24 24 20 23 19 16 16 25 25 21 24 + 22 18 16 25 23 16 25 22 15 24 17 15 17 22 21 15 23 22 20 16 21 + 22 23 16 19 22 17 24 22 25 23 24 22 23 21 19 15 23 24 + 21 22 17 21 25 22 20 22 23 21 15 23 20 15 22 15 24 22 21 16 21 + 16 21 16 17 19 23 25 17 17 24 21 15 15 20 19 19 22 21 20 22 25 + 24 15 19 17 23 22 21 22 17 24 16 21 25 25 16 17 21 25 + 25 24 16 25 5 14 10 14 23 21 20 22 22 12 22 9 15 17 23 7 14 + 10 6 6 8 22 14 14 21 25 23 20 17 5 17 13 7 25 21 21 25 16 + 14 7 9 7 7 15 22 14 25 17 9 19 20 6 7 6 22 6 + 12 19 20 18 22 10 6 18 20 22 19 24 17 7 7 11 8 13 17 11 24 + 10 25 18 6 25 9 16 15 9 17 15 8 5 13 16 12 20 18 23 6 10 + 24 25 19 14 13 24 16 13 6 19 10 16 12 5 8 13 13 7 + 14 25 19 5 13 7 24 20 8 6 13 7 19 15 18 21 20 9 7 14 19 + 14 25 13 7 5 18 14 12 10 20 8 21 21 19 13 25 8 9 7 14 14 + 11 16 7 11 21 21 25 13 13 5 5 20 23 23 25 13 19 7 + 20 15 11 16 20 21 20 17 7 8 10 13 5 6 24 22 6 5 9 25 5 + 9 7 9 20 5 13 25 5 12 12 23 16 21 13 6 8 5 21 20 8 20 + 15 7 11 25 20 10 11 9 13 24 18 6 11 19 6 23 22 7 + 18 8 23 16 20 22 23 13 6 24 5 25 23 8 21 12 19 8 8 13 17 + 5 9 7 23 18 8 10 12 17 22 23 25 14 25 5 15 20 23 21 15 16 + 13 18 21 18 5 24 22 17 7 10 14 7 24 14 9 8 13 16 + 13 25 24 22 5 10 22 22 9 18 10 21 23 21 8 22 9 25 24 19 21 + 8 8 18 17 5 13 11 13 9 22 8 12 23 7 22 15 16 10 7 9 8 + 17 7 5 21 8 17 9 16 5 21 13 5 17 7 19 8 24 10 + 20 24 21 17 20 21 25 16 6 25 12 25 21 16 22 21 6 25 13 14 13 + 11 11 22 7 8 9 14 14 20 12 5 14 6 16 11 18 17 10 19 7 9 + 13 22 24 15 22 7 5 16 10 21 24 17 15 19 14 8 25 6 + 10 15 16 25 15 12 14 20 24 22 19 8 9 7 23 22 25 14 23 22 23 + 21 11 21 6 24 11 25 18 8 25 23 22 25 9 18 16 17 12 24 25 16 + 8 11 13 9 13 20 6 21 14 17 24 21 15 17 17 15 17 5 + 20 5 15 10 6 24 6 10 25 10 20 21 13 25 22 14 19 12 22 13 18 + 15 17 6 16 12 19 14 20 6 22 18 7 11 14 12 20 6 5 11 14 18 + 6 7 12 17 24 17 8 5 19 23 6 15 10 21 18 23 15 12 + 5 19 18 25 25 14 23 21 22 11 15 21 19 11 6 5 21 14 17 10 19 + 13 5 20 23 19 21 9 12 20 23 14 21 12 24 25 16 6 25 12 5 6 + 18 25 19 17 12 24 12 12 11 18 17 5 22 8 20 13 17 6 + 74 70 70 65 74 69 74 80 69 75 + 10 60 + 25 18 23 22 24 16 17 21 22 23 23 25 20 17 25 24 23 23 15 25 20 + 24 18 21 19 15 20 17 20 17 22 24 15 17 16 20 19 24 20 20 25 17 + 23 19 18 16 16 20 19 20 16 19 20 22 16 24 19 22 15 21 + 16 17 22 15 18 22 17 15 23 18 25 21 21 23 17 21 17 25 21 21 15 + 18 24 25 19 21 19 22 21 18 16 21 21 25 15 25 18 18 19 17 22 15 + 19 16 17 18 20 16 16 16 17 24 18 22 18 16 23 21 18 15 + 21 16 21 17 15 19 25 22 25 18 18 23 24 22 19 20 21 25 16 17 24 + 16 19 17 17 16 16 24 16 17 23 24 20 23 17 17 25 22 19 24 24 18 + 21 20 16 20 25 23 21 18 17 23 24 23 15 21 25 24 22 16 + 22 15 25 24 25 20 16 17 15 20 19 23 17 20 24 25 24 23 22 20 23 + 24 23 24 25 19 15 25 19 15 19 18 19 18 25 17 22 15 25 17 15 20 + 22 23 17 21 16 22 21 20 23 23 23 23 22 18 22 18 18 24 + 21 20 25 23 23 23 18 22 24 20 23 15 20 19 21 18 24 17 15 17 21 + 21 19 24 24 15 24 21 24 23 25 17 23 17 18 19 20 25 25 21 20 23 + 16 25 24 24 22 24 22 23 20 19 19 16 17 15 19 23 22 25 + 15 16 15 15 24 25 19 22 15 23 21 19 16 21 16 15 21 17 23 20 25 + 23 25 16 15 20 15 18 25 19 20 18 16 22 21 23 22 21 25 19 18 19 + 16 22 15 15 22 21 16 21 23 19 20 24 18 17 18 17 19 16 + 15 17 15 21 21 17 15 21 25 25 17 16 15 19 18 25 18 16 21 21 21 + 20 24 21 15 15 21 25 24 22 20 15 21 25 22 18 15 21 15 22 15 23 + 23 17 16 16 18 21 17 25 19 20 25 25 25 17 23 25 16 23 + 22 16 25 22 20 18 23 18 22 25 17 15 15 23 20 22 19 15 20 23 16 + 21 21 25 17 18 18 15 24 17 21 22 23 15 16 23 20 17 16 15 21 16 + 21 23 16 24 15 21 22 18 20 19 18 22 20 20 19 16 18 22 + 18 16 16 24 21 19 25 19 23 22 16 22 20 17 23 23 15 19 23 15 21 + 17 22 20 21 15 23 15 21 15 22 25 18 19 21 25 15 15 15 24 22 19 + 17 22 25 16 25 19 24 24 16 15 21 24 18 18 25 18 20 25 + 21 15 19 24 21 16 23 19 22 24 20 19 20 20 21 23 19 15 23 15 17 + 22 20 16 23 17 20 24 21 16 17 19 16 24 17 21 16 20 23 22 20 20 + 20 18 15 19 25 22 21 19 18 23 15 16 24 20 19 25 15 17 + 16 25 23 24 19 17 17 16 18 17 12 10 24 25 6 18 17 6 10 10 6 + 11 8 25 22 18 18 12 17 5 16 8 17 15 22 13 13 15 10 25 15 18 + 20 25 6 18 15 24 9 16 7 15 24 9 18 12 9 19 22 16 + 10 7 20 18 19 7 8 8 18 7 8 16 14 11 20 17 5 6 17 19 21 + 20 10 5 25 15 5 16 19 11 14 13 12 22 18 13 6 8 17 5 5 23 + 23 11 12 17 17 19 21 24 15 11 23 11 18 6 21 8 24 14 + 5 5 13 22 5 25 9 9 14 8 11 8 13 10 16 12 5 20 19 16 13 + 19 18 8 18 6 23 9 12 12 21 11 13 8 17 16 12 14 22 13 12 16 + 24 7 18 17 8 17 17 25 22 16 20 13 12 22 12 14 8 18 + 25 19 15 7 21 16 23 10 24 14 19 17 10 14 25 21 13 6 8 8 15 + 13 20 19 11 7 18 6 13 9 13 7 16 23 9 7 6 7 13 7 16 8 + 21 14 16 25 22 7 10 13 17 23 6 19 22 15 14 10 23 25 + 25 20 25 13 7 6 11 7 12 17 18 23 16 25 21 9 19 20 13 24 24 + 9 17 20 19 13 6 18 11 8 5 6 17 11 9 8 16 16 24 12 5 12 + 15 14 10 8 21 13 17 16 18 7 15 22 5 9 22 12 25 11 + 23 8 15 7 15 7 12 10 17 13 13 11 21 23 21 8 10 17 15 25 10 + 13 10 18 18 9 11 22 18 24 24 18 21 22 19 17 23 25 16 5 11 7 + 10 18 5 7 19 12 9 23 25 17 13 11 10 6 5 19 22 24 + 25 19 24 20 18 6 8 16 22 14 22 8 15 13 15 12 21 20 13 16 12 + 20 7 18 19 24 9 7 10 11 17 17 11 21 25 5 18 9 22 22 11 9 + 14 7 13 13 22 20 15 17 20 8 21 8 5 25 21 19 10 8 + 18 24 20 8 19 21 23 6 20 23 23 9 7 23 20 7 6 11 23 16 17 + 24 23 19 14 13 15 22 13 16 6 14 20 11 13 19 17 12 6 23 13 25 + 23 12 17 5 24 25 11 10 25 25 22 12 12 10 8 8 18 14 + 18 10 9 23 17 13 15 13 8 5 15 6 15 12 8 23 7 22 10 9 14 + 24 8 11 7 20 24 6 22 20 6 18 8 10 6 22 18 18 5 7 13 25 + 7 15 18 15 19 7 23 11 7 6 9 15 7 12 9 20 11 23 + 22 20 10 16 24 22 15 5 25 24 11 8 7 20 24 6 19 13 14 8 18 + 6 16 21 6 16 14 21 18 5 15 21 7 10 20 18 22 14 12 18 17 9 + 14 12 17 22 8 16 13 12 6 20 20 6 9 22 13 20 24 19 + 75 68 67 70 70 72 73 77 64 72 diff --git a/tests/GeneralizedAssignmentProblem/gap1a.txt b/tests/GeneralizedAssignmentProblem/gap1a.txt new file mode 100644 index 0000000..a2ebdcb --- /dev/null +++ b/tests/GeneralizedAssignmentProblem/gap1a.txt @@ -0,0 +1,12 @@ + 5 15 + 17 21 22 18 24 15 20 18 19 18 16 22 24 24 16 + 23 16 21 16 17 16 19 25 18 21 17 15 25 17 24 + 16 20 16 25 24 16 17 19 19 18 20 16 17 21 24 + 19 19 22 22 20 16 19 17 21 19 25 23 25 25 25 + 18 19 15 15 21 25 16 16 23 15 22 17 19 22 24 + 8 15 14 23 8 16 8 25 9 17 25 15 10 8 24 + 15 7 23 22 11 11 12 10 17 16 7 16 10 18 22 + 21 20 6 22 24 10 24 9 21 14 11 14 11 19 16 + 20 11 8 14 9 5 6 19 19 7 6 6 13 9 18 + 8 13 13 13 10 20 25 16 16 17 10 10 5 12 23 + 36 34 38 27 33 diff --git a/tests/GeneralizedAssignmentProblem/gap2.txt b/tests/GeneralizedAssignmentProblem/gap2.txt new file mode 100644 index 0000000..ea81533 --- /dev/null +++ b/tests/GeneralizedAssignmentProblem/gap2.txt @@ -0,0 +1,111 @@ + 5 + 5 20 + 15 12 16 15 20 18 11 14 23 14 18 13 + 11 15 17 18 20 11 20 24 + 22 14 10 15 12 21 24 16 17 22 11 15 + 18 15 18 23 22 23 21 13 + 25 11 22 10 22 17 22 12 21 21 16 14 + 23 21 14 17 25 18 15 15 + 23 13 14 25 21 18 23 19 17 18 20 20 + 22 24 23 13 17 22 20 21 + 15 25 22 14 17 21 16 21 20 12 15 18 + 17 21 20 20 13 14 23 14 + 11 11 5 25 10 17 16 20 5 20 14 10 + 15 6 11 14 13 8 15 11 + 17 17 12 23 16 25 13 16 19 16 24 17 + 24 6 6 16 25 21 5 18 + 13 13 20 17 8 7 16 9 23 18 21 24 + 11 15 12 24 19 23 13 12 + 6 10 18 16 12 25 17 7 10 6 20 20 + 9 20 11 21 6 9 20 23 + 7 14 18 24 7 24 18 19 18 23 15 16 + 14 9 16 25 15 20 23 17 + 42 54 52 47 55 + 5 20 + 22 19 13 18 24 21 24 22 11 19 15 15 + 18 11 14 11 21 14 25 22 + 13 16 12 18 13 13 16 12 19 21 18 25 + 20 22 25 22 16 19 18 18 + 21 20 20 19 10 22 22 22 23 23 17 13 + 13 20 14 14 24 10 25 13 + 22 14 18 24 11 14 10 21 15 19 23 23 + 13 23 20 19 19 18 18 15 + 22 12 25 20 16 16 19 11 15 21 11 19 + 21 24 20 16 11 12 15 10 + 18 9 14 10 18 18 12 22 19 15 21 20 + 7 14 15 6 13 15 18 15 + 10 23 23 23 24 6 14 7 16 13 23 6 + 7 7 21 11 24 17 16 23 + 15 6 13 13 18 7 22 19 18 6 23 9 + 10 13 21 23 24 17 16 15 + 25 7 13 9 23 14 20 9 16 18 22 8 + 12 13 9 7 11 7 9 19 + 15 12 10 8 22 17 13 21 11 10 6 20 + 17 11 10 24 21 18 12 7 + 49 51 49 43 46 + 5 20 + 11 19 24 11 11 23 15 25 17 20 15 16 + 10 19 23 17 14 20 18 14 + 13 16 20 13 24 23 24 23 12 21 17 20 + 22 11 25 12 10 14 17 15 + 16 14 13 21 19 22 13 10 16 15 22 16 + 24 19 23 19 24 10 23 10 + 17 12 20 13 21 24 14 14 14 16 12 15 + 24 18 13 17 18 18 12 11 + 19 22 23 14 11 14 18 13 25 18 11 10 + 21 21 25 20 11 11 13 13 + 18 6 5 16 21 16 19 23 16 20 14 18 + 11 20 5 13 7 10 5 13 + 12 16 21 10 17 7 19 8 24 19 6 18 + 24 12 8 18 22 25 12 18 + 7 22 23 12 23 18 6 23 14 8 16 10 + 20 12 14 13 13 11 19 15 + 6 23 7 10 13 14 11 17 10 14 22 9 + 18 7 19 15 19 5 24 13 + 16 10 19 14 7 18 25 14 8 8 7 8 + 22 24 16 18 16 11 8 9 + 45 51 48 45 46 + 5 20 + 12 24 13 11 20 12 19 17 19 22 19 22 + 13 12 10 12 13 13 25 16 + 25 24 22 10 21 17 21 17 13 15 15 15 + 20 20 19 14 17 14 12 20 + 21 11 15 16 11 14 22 22 12 17 15 15 + 11 18 13 19 20 25 13 13 + 24 15 19 17 24 20 21 18 25 15 14 23 + 10 11 23 22 18 19 24 22 + 14 18 20 14 15 25 13 19 17 10 18 13 + 21 17 22 18 17 10 20 12 + 13 6 12 16 23 15 20 9 6 18 21 21 + 13 9 23 19 16 9 25 11 + 16 9 9 16 11 17 21 21 23 12 6 20 + 20 19 12 20 21 24 13 6 + 21 7 6 7 6 15 18 7 24 12 24 8 + 14 25 21 21 22 23 16 19 + 10 23 16 8 11 14 5 25 23 11 25 18 + 11 14 17 22 15 23 7 18 + 16 14 17 15 8 24 16 23 6 20 7 12 + 19 7 19 15 16 20 25 18 + 49 51 51 52 52 + 5 20 + 21 23 20 11 11 17 14 15 16 22 18 17 + 10 12 14 11 18 13 11 25 + 23 17 16 18 13 21 14 13 20 14 25 10 + 17 14 20 20 21 22 22 20 + 22 20 12 22 13 13 16 22 22 10 18 13 + 13 11 19 13 20 10 16 19 + 11 10 23 19 18 21 17 11 10 21 19 22 + 18 22 17 21 15 10 24 24 + 18 22 23 19 15 12 14 13 12 22 21 15 + 12 11 21 20 22 13 11 21 + 14 12 6 18 9 12 19 7 22 19 7 6 + 25 10 13 7 24 17 12 6 + 15 19 25 17 16 7 8 21 21 5 8 13 + 16 24 15 14 8 7 18 18 + 17 15 23 14 24 10 15 17 8 23 16 23 + 25 13 24 17 6 14 7 21 + 24 23 19 15 15 13 6 12 21 21 16 5 + 8 11 9 9 23 11 8 11 + 25 11 15 11 9 18 10 23 9 7 19 14 + 7 6 22 17 7 7 5 13 + 43 47 54 45 42 diff --git a/tests/GeneralizedAssignmentProblem/gap3.txt b/tests/GeneralizedAssignmentProblem/gap3.txt new file mode 100644 index 0000000..e60df4f --- /dev/null +++ b/tests/GeneralizedAssignmentProblem/gap3.txt @@ -0,0 +1,111 @@ + 5 + 5 25 + 18 19 19 17 24 25 24 25 25 23 20 21 25 17 25 21 25 19 23 19 20 + 15 25 23 17 + 25 17 18 16 18 15 23 20 19 22 23 18 17 16 16 24 16 23 23 24 19 + 17 15 17 17 + 17 25 15 23 21 20 24 17 21 22 22 15 18 23 17 22 20 24 19 18 15 + 15 18 19 19 + 21 16 25 23 18 21 18 16 21 21 15 21 24 23 24 23 20 25 24 18 19 + 23 22 22 16 + 24 16 24 19 16 25 23 25 17 21 21 22 17 25 19 21 23 19 17 24 19 + 15 20 15 20 + 25 23 5 13 6 15 24 9 17 11 5 6 8 14 9 9 21 23 13 8 22 + 20 24 15 20 + 18 8 5 20 8 7 13 17 9 16 19 11 6 12 25 23 9 21 11 15 24 + 23 15 21 12 + 7 25 13 9 16 16 8 17 5 17 10 18 21 25 17 24 20 16 9 18 18 + 18 16 6 24 + 25 11 8 7 25 20 24 16 9 15 22 10 17 6 22 11 19 20 14 14 8 + 18 22 18 22 + 7 16 20 18 13 10 15 20 5 19 11 6 11 23 15 21 15 20 21 11 9 + 25 17 18 12 + 58 58 62 64 60 + 5 25 + 22 20 18 19 18 24 22 17 23 20 24 15 21 24 24 24 24 25 19 15 22 + 19 20 16 20 + 15 25 18 18 21 15 20 16 21 17 15 22 18 20 18 18 19 15 15 17 19 + 19 17 22 22 + 23 18 24 15 20 24 18 18 20 16 23 16 23 16 15 17 17 20 24 22 23 + 17 15 25 17 + 17 19 18 20 20 19 17 25 19 20 16 17 17 16 21 21 25 18 15 15 24 + 24 15 15 24 + 17 22 19 19 19 24 15 16 16 25 25 24 20 17 15 17 17 19 16 18 23 + 20 15 21 18 + 14 11 25 16 17 18 22 16 20 6 6 14 14 25 9 7 6 11 25 19 22 + 11 20 8 19 + 18 16 5 17 8 21 9 5 12 9 8 20 6 18 16 11 14 11 6 21 6 + 5 14 18 12 + 11 5 6 8 20 12 14 9 15 17 23 11 11 12 20 16 10 10 12 18 24 + 6 20 9 18 + 6 16 8 6 5 9 12 7 24 8 10 14 23 12 9 5 22 8 11 5 16 + 6 20 14 17 + 16 23 5 6 8 24 25 5 25 19 23 8 16 7 16 8 16 14 17 25 18 + 23 12 5 20 + 60 48 53 46 61 + 5 25 + 15 19 20 22 21 24 20 22 18 24 20 22 18 24 21 16 21 17 17 18 25 + 21 22 25 22 + 21 24 24 17 24 20 19 23 16 23 23 22 17 16 23 16 24 18 15 17 24 + 22 24 15 16 + 18 25 16 22 18 23 21 21 19 25 15 19 23 19 19 15 22 17 16 21 18 + 22 17 25 18 + 22 22 15 19 18 19 19 22 17 17 24 20 21 21 24 19 25 19 15 20 22 + 18 20 17 15 + 23 18 21 23 15 19 19 19 20 19 17 20 20 21 23 25 24 23 23 19 19 + 20 17 15 24 + 19 14 6 10 6 20 16 12 17 23 7 23 20 15 7 17 7 25 10 17 10 + 6 10 23 12 + 18 8 17 19 19 24 20 10 11 14 17 19 23 24 7 25 24 24 8 17 9 + 22 8 11 11 + 14 15 18 22 9 8 10 21 17 18 9 19 6 25 17 6 12 6 12 15 21 + 12 14 19 7 + 6 5 5 23 12 6 11 16 13 20 12 9 24 16 22 12 8 24 21 13 8 + 18 13 17 21 + 18 25 20 18 20 8 18 24 11 9 14 23 18 19 11 5 12 11 17 16 22 + 17 6 16 24 + 56 65 56 56 64 + 5 25 + 16 18 22 17 21 18 15 20 16 17 17 20 23 18 24 25 22 20 20 23 25 + 16 17 24 18 + 23 15 16 16 15 21 20 25 18 16 25 15 20 18 16 16 20 17 17 22 23 + 22 20 17 18 + 21 20 22 20 24 24 24 23 18 15 18 17 19 17 21 25 21 16 22 16 17 + 25 20 18 19 + 21 18 22 24 24 24 22 21 20 15 20 18 25 24 25 15 19 15 21 23 23 + 24 20 17 15 + 18 19 24 16 17 16 17 22 23 24 15 20 23 17 21 24 23 22 17 16 25 + 15 20 23 16 + 21 18 18 5 12 23 21 12 16 20 21 23 12 9 24 6 22 22 12 20 5 + 11 8 6 14 + 9 18 18 16 22 8 10 17 15 13 22 20 19 7 10 25 15 10 21 10 23 + 8 6 20 11 + 23 8 16 25 5 14 18 12 17 21 25 12 16 24 5 18 16 21 23 9 21 + 25 8 5 16 + 14 5 18 11 15 10 10 11 6 16 7 17 20 7 24 12 6 18 8 12 17 + 6 25 16 23 + 18 18 7 21 23 13 5 15 20 24 19 21 23 10 22 23 11 22 25 7 21 + 11 23 13 22 + 60 59 64 53 69 + 5 25 + 24 21 17 22 19 18 20 21 15 21 17 25 18 18 15 20 16 19 16 24 16 + 22 18 17 22 + 20 23 23 21 24 22 21 24 15 17 22 17 20 16 24 18 19 21 22 18 23 + 18 23 16 24 + 22 18 24 22 17 17 16 15 25 23 16 16 19 21 24 20 24 15 15 23 24 + 19 20 23 25 + 22 22 19 21 16 25 16 16 16 16 17 17 18 15 22 18 15 20 15 17 25 + 15 19 20 20 + 21 21 24 25 24 19 23 17 20 24 21 16 19 15 16 15 25 25 15 15 21 + 16 16 19 15 + 11 6 5 21 12 12 6 25 11 7 11 22 18 16 12 7 7 9 9 13 15 + 22 23 24 11 + 22 25 6 21 17 18 10 18 25 16 14 5 5 8 20 6 16 12 8 8 19 + 5 15 12 25 + 8 10 11 24 8 7 14 6 25 6 13 25 11 15 9 17 6 8 25 21 17 + 25 19 16 10 + 18 13 22 7 20 8 10 17 7 12 20 17 6 15 18 23 10 10 19 25 25 + 13 16 20 15 + 23 14 16 6 22 21 9 13 8 18 11 25 9 11 19 20 17 7 10 20 7 + 16 20 17 10 + 53 56 56 61 59 diff --git a/tests/GeneralizedAssignmentProblem/gap4.txt b/tests/GeneralizedAssignmentProblem/gap4.txt new file mode 100644 index 0000000..9d2e314 --- /dev/null +++ b/tests/GeneralizedAssignmentProblem/gap4.txt @@ -0,0 +1,161 @@ + 5 + 5 30 + 15 16 12 17 12 15 19 15 19 17 25 17 + 19 15 20 16 12 16 13 22 16 16 14 21 21 + 24 13 25 21 22 + 12 20 11 13 22 15 14 22 21 10 24 22 + 23 14 14 22 22 17 14 19 21 11 20 21 14 + 23 10 17 24 22 + 19 19 16 11 18 20 18 22 21 15 22 23 + 16 23 18 18 18 22 21 12 20 18 13 25 10 + 23 21 24 22 18 + 23 12 13 12 24 23 11 20 14 20 19 14 + 19 22 24 13 10 16 12 23 18 24 24 18 25 + 10 18 18 19 15 + 15 13 16 23 19 21 15 12 18 21 12 18 + 21 16 17 14 13 14 19 18 21 12 14 17 15 + 24 21 13 11 24 + 7 13 21 19 10 23 14 16 13 16 17 11 + 23 20 9 24 24 19 18 21 18 18 18 17 24 + 19 9 9 7 13 + 12 12 23 23 6 24 13 24 16 17 9 15 + 5 20 19 17 16 13 8 13 24 5 6 25 10 + 16 23 8 6 13 + 11 17 17 21 12 13 16 17 15 11 16 20 + 23 18 14 24 23 21 6 20 13 10 20 15 20 + 10 8 23 24 18 + 18 23 13 8 15 12 16 13 9 6 12 13 + 13 14 18 6 6 7 12 10 22 10 8 8 9 + 18 5 7 21 22 + 22 7 7 13 12 15 13 12 23 16 21 9 + 15 16 6 18 11 16 22 6 9 7 15 9 6 + 16 17 23 5 10 + 79 72 79 61 64 + 5 30 + 16 16 13 20 22 24 15 25 18 25 11 19 + 20 21 17 16 16 21 17 13 13 17 14 12 24 + 20 15 22 15 12 + 14 15 19 16 22 18 13 11 21 24 14 23 + 21 20 13 11 25 19 21 14 18 19 15 25 23 + 17 19 15 13 25 + 25 23 19 17 11 19 16 25 11 23 15 17 + 21 13 18 18 22 13 20 23 24 16 24 16 23 + 15 10 23 23 14 + 11 16 12 16 13 11 18 14 21 15 11 10 + 20 13 13 17 17 13 17 19 20 17 14 21 23 + 17 19 18 22 12 + 18 11 24 18 13 14 14 14 21 19 20 25 + 22 18 24 23 21 17 23 23 17 20 23 24 19 + 15 15 14 24 15 + 7 10 9 13 22 18 19 17 18 15 5 9 + 11 18 21 20 19 21 21 7 23 24 15 14 18 + 10 19 5 22 13 + 24 25 12 24 15 21 20 14 25 13 14 6 + 16 21 7 24 7 14 7 18 13 24 22 20 10 + 21 20 11 10 24 + 12 13 7 13 16 7 14 25 23 18 10 14 + 16 24 24 16 15 12 13 7 18 16 19 12 13 + 22 24 17 12 19 + 19 5 7 15 16 9 18 6 7 22 8 10 + 14 5 9 20 6 11 9 5 6 20 25 17 19 + 11 15 18 24 7 + 10 15 13 24 11 13 17 6 9 19 21 21 + 12 14 18 8 17 24 8 20 15 18 25 19 7 + 16 15 15 6 11 + 76 80 75 62 72 + 5 30 + 19 23 11 24 19 18 24 19 25 21 17 22 + 25 16 19 21 17 14 13 22 11 16 23 14 24 + 11 22 17 21 11 + 11 18 19 19 13 15 12 21 13 19 16 19 + 21 21 21 19 17 20 13 18 13 15 14 19 18 + 12 24 13 19 21 + 13 21 22 22 25 17 14 18 16 17 18 20 + 23 14 21 17 18 24 19 11 12 24 25 23 22 + 24 12 19 13 23 + 17 15 16 14 19 20 15 16 18 23 20 24 + 12 19 13 19 20 20 24 23 21 13 14 16 14 + 18 16 13 21 15 + 22 21 11 11 22 24 24 15 23 19 23 12 + 20 16 22 22 21 19 18 18 12 10 12 11 19 + 17 13 23 22 19 + 14 18 6 11 14 7 24 19 8 16 22 9 + 12 16 14 14 17 22 6 13 14 14 24 18 18 + 12 24 23 10 7 + 21 13 18 10 16 24 18 11 17 24 16 22 + 9 10 24 12 24 9 5 24 16 19 11 15 10 + 12 25 18 8 11 + 13 22 20 24 19 20 17 6 23 10 6 16 + 24 6 5 12 16 7 11 8 21 9 17 13 23 + 15 20 9 14 14 + 7 15 11 21 18 12 7 22 9 23 21 8 + 18 23 20 12 5 12 5 10 12 20 18 17 11 + 11 18 20 24 24 + 10 15 17 20 17 11 22 19 24 24 17 20 + 16 10 6 11 9 14 14 22 17 16 19 21 24 + 22 18 8 5 14 + 72 75 70 72 78 + 5 30 + 16 14 16 21 13 14 14 21 20 19 25 12 + 22 17 12 21 11 10 24 15 23 14 14 20 15 + 23 14 23 13 22 + 24 18 23 18 12 20 12 15 14 22 22 18 + 18 21 12 19 18 13 16 16 16 10 18 15 14 + 13 23 15 12 10 + 20 16 15 18 24 16 21 21 24 15 14 23 + 11 12 15 14 18 15 14 12 25 20 23 13 16 + 23 18 20 22 16 + 20 14 20 16 17 24 15 23 13 11 18 22 + 10 15 19 10 21 10 21 11 13 16 18 22 20 + 16 21 22 19 20 + 19 15 12 11 23 24 15 17 17 11 23 14 + 20 21 22 16 16 23 10 22 12 25 24 20 13 + 20 16 11 23 18 + 15 16 24 17 9 18 5 8 25 21 22 22 + 11 7 23 15 16 19 22 21 6 14 13 19 21 + 14 21 15 17 10 + 22 13 7 14 23 10 6 11 21 14 15 9 + 13 18 15 14 7 7 17 8 16 19 16 15 10 + 7 12 10 21 13 + 9 16 13 20 10 17 16 15 24 12 16 8 + 6 6 21 23 6 16 9 18 20 10 12 15 20 + 21 11 9 18 25 + 14 22 23 8 25 24 23 12 8 15 13 23 + 7 11 10 10 21 19 23 24 7 8 18 11 18 + 10 19 25 16 10 + 10 15 20 21 12 23 19 11 9 20 9 13 + 11 10 11 8 18 10 8 6 19 15 7 16 5 + 17 24 12 20 21 + 78 64 71 76 67 + 5 30 + 15 20 23 10 16 20 20 24 13 13 11 11 + 15 16 18 17 17 19 20 10 15 17 12 17 15 + 23 22 23 25 16 + 18 23 19 11 14 20 20 13 20 11 13 24 + 14 16 18 19 19 14 16 12 11 16 12 23 12 + 19 10 10 22 20 + 15 23 11 19 11 13 16 21 23 24 13 15 + 18 24 21 23 21 20 25 19 15 18 17 21 23 + 10 11 20 15 17 + 18 24 11 21 22 11 23 11 16 12 20 21 + 15 10 16 24 20 19 22 19 24 25 15 24 19 + 18 21 20 15 23 + 25 16 21 13 12 12 16 17 11 21 22 12 + 21 13 20 22 12 21 14 20 23 13 25 10 10 + 20 12 19 23 14 + 25 9 15 24 12 14 23 13 17 15 17 15 + 21 23 16 23 15 18 7 16 18 10 6 24 21 + 8 10 16 7 7 + 8 20 11 9 13 6 13 13 12 24 17 9 + 13 17 11 15 10 24 6 20 16 14 23 12 11 + 11 22 8 9 12 + 21 7 14 8 6 18 11 18 18 10 21 9 + 20 20 15 20 7 17 14 8 14 12 21 19 24 + 21 16 5 19 17 + 14 20 9 14 17 8 8 9 20 17 9 19 + 7 15 12 12 16 22 20 5 15 16 18 8 22 + 24 21 22 12 7 + 20 7 5 10 13 7 8 21 19 16 12 20 + 16 8 18 17 23 6 12 10 22 24 6 20 8 + 9 17 8 24 22 + 74 65 72 70 68 diff --git a/tests/GeneralizedAssignmentProblem/gap5.txt b/tests/GeneralizedAssignmentProblem/gap5.txt new file mode 100644 index 0000000..1415009 --- /dev/null +++ b/tests/GeneralizedAssignmentProblem/gap5.txt @@ -0,0 +1,171 @@ + 5 + 8 24 + 25 23 20 16 19 22 20 16 15 22 15 21 20 23 20 22 19 25 25 24 21 + 17 23 17 + 16 19 22 22 19 23 17 24 15 24 18 19 20 24 25 25 19 24 18 21 16 + 25 15 20 + 20 18 23 23 23 17 19 16 24 24 17 23 19 22 23 25 23 18 19 24 20 + 17 23 23 + 16 16 15 23 15 15 25 22 17 20 19 16 17 17 20 17 17 18 16 18 15 + 25 22 17 + 17 23 21 20 24 22 25 17 22 20 16 22 21 23 24 15 22 25 18 19 19 + 17 22 23 + 24 21 23 17 21 19 19 17 18 24 15 15 17 18 15 24 19 21 23 24 17 + 20 16 21 + 18 21 22 23 22 15 18 15 21 22 15 23 21 25 25 23 20 16 25 17 15 + 15 18 16 + 19 24 18 17 21 18 24 25 18 23 21 15 24 23 18 18 23 23 16 20 20 + 19 25 21 + 8 18 22 5 11 11 22 11 17 22 11 20 13 13 7 22 15 22 24 8 8 + 24 18 8 + 24 14 11 15 24 8 10 15 19 25 6 13 10 25 19 24 13 12 5 18 10 + 24 8 5 + 22 22 21 22 13 16 21 5 25 13 12 9 24 6 22 24 11 21 11 14 12 + 10 20 6 + 13 8 19 12 19 18 10 21 5 9 11 9 22 8 12 13 9 25 19 24 22 + 6 19 14 + 25 16 13 5 11 8 7 8 25 20 24 20 11 6 10 10 6 22 10 10 13 + 21 5 19 + 19 19 5 11 22 24 18 11 6 13 24 24 22 6 22 5 14 6 16 11 6 + 8 18 10 + 24 10 9 10 6 15 7 13 20 8 7 9 24 9 21 9 11 19 10 5 23 + 20 5 21 + 6 9 9 5 12 10 16 15 19 18 20 18 16 21 11 12 22 16 21 25 7 + 14 16 10 + 36 35 38 34 32 34 31 34 + 8 24 + 16 20 15 22 21 21 19 20 16 24 23 18 21 15 19 25 15 24 15 21 17 + 17 25 18 + 24 20 22 17 16 22 25 23 22 23 22 25 25 15 15 19 24 22 16 18 22 + 22 23 25 + 17 20 18 18 15 21 24 19 17 24 16 17 24 16 19 21 21 18 16 25 17 + 17 18 24 + 21 25 17 17 21 22 17 19 23 17 19 18 16 16 18 21 18 24 19 17 24 + 18 23 21 + 15 19 24 21 20 22 16 20 20 24 21 25 21 19 22 17 25 19 17 25 22 + 15 19 16 + 24 22 25 20 15 19 15 16 18 25 22 17 25 22 18 15 16 20 21 24 17 + 16 17 18 + 19 17 22 20 21 18 19 17 23 21 18 15 22 23 22 15 19 19 23 23 17 + 21 18 20 + 25 24 22 23 21 23 25 22 25 16 24 22 23 17 22 18 19 15 17 25 21 + 23 25 24 + 13 5 6 23 10 17 12 11 13 19 10 18 13 24 18 17 17 8 13 20 17 + 20 13 22 + 16 23 19 17 24 17 21 16 5 14 16 22 24 25 8 13 14 10 8 11 8 + 12 11 10 + 8 5 5 17 21 16 16 13 23 20 13 13 18 25 12 19 12 19 11 24 21 + 5 15 23 + 19 19 25 8 5 20 6 17 24 20 12 18 5 14 24 16 24 6 9 13 22 + 5 6 25 + 12 10 22 18 24 8 9 5 14 22 14 15 25 14 11 6 21 16 6 17 13 + 21 19 5 + 10 15 14 8 11 24 11 10 5 19 8 24 5 16 7 6 6 21 13 17 13 + 15 16 14 + 19 17 23 23 16 7 20 21 12 13 25 19 10 8 22 25 13 10 15 21 10 + 24 11 17 + 22 19 15 8 9 16 21 21 9 10 8 11 18 7 16 7 13 5 6 15 7 + 18 23 24 + 35 36 37 36 34 30 40 32 + 8 24 + 15 18 18 21 25 19 17 23 18 25 24 19 20 19 16 20 23 19 23 23 20 + 22 24 19 + 16 15 19 15 16 18 16 19 20 24 21 25 24 17 24 16 16 19 18 19 22 + 22 21 16 + 17 22 24 19 21 23 23 20 16 23 20 18 18 23 21 23 16 15 23 23 22 + 22 19 16 + 17 19 15 16 16 22 15 21 18 20 15 15 17 24 16 15 16 24 19 15 17 + 15 19 23 + 15 21 25 22 16 18 23 20 18 18 17 16 16 23 21 19 18 21 20 17 25 + 23 16 25 + 22 16 15 20 25 15 18 17 23 17 15 16 18 25 23 25 25 18 16 22 16 + 16 25 16 + 17 16 21 15 19 24 16 24 16 25 17 22 21 20 18 23 16 17 16 15 18 + 24 19 15 + 16 16 18 20 23 15 25 17 20 18 25 17 22 21 15 19 16 20 24 24 19 + 25 15 19 + 8 24 13 22 19 11 23 22 6 12 6 7 13 22 14 25 10 17 17 12 24 + 8 23 18 + 9 16 20 24 8 20 13 15 25 19 25 20 21 6 17 25 13 21 23 8 8 + 5 21 18 + 13 23 19 13 21 12 19 8 25 21 24 8 23 25 7 15 6 12 20 15 7 + 13 18 20 + 17 9 22 6 16 6 9 17 24 18 13 15 19 18 14 17 25 7 15 5 19 + 10 14 24 + 16 5 7 7 24 19 5 23 24 22 25 17 10 23 18 9 24 25 5 23 22 + 18 14 9 + 20 14 13 22 15 6 21 16 10 8 16 5 19 6 12 18 7 7 10 22 24 + 16 9 10 + 19 21 22 23 20 10 15 19 12 8 14 7 25 15 10 25 9 25 17 8 9 + 17 12 20 + 8 21 12 18 23 7 10 9 19 9 23 18 18 25 23 21 23 8 18 17 8 + 10 20 7 + 37 40 38 35 39 32 38 37 + 8 24 + 17 15 21 16 15 25 15 15 24 23 17 18 25 24 24 22 17 22 19 24 25 + 21 23 21 + 17 21 19 17 20 16 19 23 22 23 22 16 18 24 17 15 20 22 20 24 19 + 19 19 25 + 23 18 25 24 20 17 23 19 22 24 24 24 15 25 24 18 21 24 24 16 16 + 15 20 19 + 15 23 24 19 22 19 22 24 24 21 22 18 21 22 19 19 23 21 20 18 15 + 16 15 19 + 17 21 22 20 25 16 21 16 21 19 22 25 19 19 18 23 16 15 25 15 20 + 25 18 17 + 20 20 23 18 22 25 15 19 15 16 25 25 23 22 16 21 17 22 17 19 16 + 25 15 18 + 21 18 22 15 24 23 24 20 21 24 16 16 18 17 17 19 20 24 17 20 16 + 22 16 21 + 25 16 25 16 15 22 21 19 15 21 21 18 21 17 17 19 18 22 20 16 16 + 18 25 15 + 6 17 16 17 6 7 7 23 6 23 13 17 15 17 5 21 18 23 21 10 8 + 12 10 8 + 10 17 5 24 23 5 14 10 17 14 18 10 21 14 6 9 9 15 8 10 24 + 20 18 14 + 18 7 5 15 14 8 12 21 7 7 25 13 11 25 7 19 7 6 11 24 21 + 5 20 20 + 5 13 13 6 6 18 19 7 19 6 9 12 12 14 16 18 21 8 5 10 17 + 8 11 8 + 8 8 25 8 23 13 9 23 21 22 7 17 14 22 19 12 17 5 13 12 19 + 14 12 20 + 12 17 15 21 18 21 15 24 22 17 10 13 20 22 21 12 13 18 8 24 12 + 8 17 5 + 7 15 12 18 17 7 16 19 16 24 18 16 21 7 5 17 12 6 14 23 9 + 11 23 12 + 25 24 22 12 7 23 24 8 18 22 18 11 6 5 25 16 20 25 7 17 15 + 20 16 20 + 32 33 32 28 36 38 34 40 + 8 24 + 18 21 23 23 21 16 25 22 21 18 15 18 20 17 21 25 25 18 24 16 17 + 22 21 20 + 17 20 19 22 21 22 21 22 20 24 22 21 21 19 23 15 25 24 20 20 25 + 17 22 19 + 24 22 16 21 16 17 22 15 16 22 24 23 25 16 24 17 16 17 16 15 21 + 22 20 21 + 15 17 16 21 17 15 24 17 18 21 25 22 17 24 22 18 16 16 16 24 19 + 15 16 18 + 15 15 23 17 16 19 16 19 18 19 23 20 21 22 22 16 19 15 17 20 20 + 25 25 24 + 23 18 25 25 20 20 16 24 18 19 18 21 19 21 17 25 18 16 21 15 21 + 15 18 24 + 17 25 16 15 23 25 23 23 25 18 18 25 19 25 22 19 16 16 18 24 19 + 17 22 19 + 21 16 16 21 23 24 20 16 22 19 18 15 23 19 22 17 15 23 25 22 25 + 17 18 22 + 21 11 12 23 24 20 21 16 19 11 21 15 5 17 20 25 20 21 11 19 9 + 14 20 5 + 6 24 8 7 12 22 13 17 6 16 22 18 23 9 22 20 18 24 7 15 9 + 14 20 6 + 5 16 13 7 21 7 19 25 8 9 16 8 21 23 9 16 7 8 24 22 12 + 15 17 5 + 23 18 18 7 9 10 13 16 22 12 18 5 15 14 23 21 20 10 14 17 21 + 8 7 15 + 21 23 10 15 8 25 15 5 11 23 12 22 21 18 24 15 25 12 15 9 25 + 13 19 10 + 17 24 9 14 25 13 22 10 22 20 19 11 9 24 14 21 21 23 9 23 13 + 11 18 6 + 6 18 22 10 7 23 8 12 23 9 18 24 14 24 5 8 14 21 21 17 19 + 19 15 15 + 7 19 25 12 17 21 20 25 20 13 10 5 12 23 15 14 10 13 25 6 13 + 14 21 18 + 40 35 33 35 39 39 37 37 diff --git a/tests/GeneralizedAssignmentProblem/gap6.txt b/tests/GeneralizedAssignmentProblem/gap6.txt new file mode 100644 index 0000000..da8aa17 --- /dev/null +++ b/tests/GeneralizedAssignmentProblem/gap6.txt @@ -0,0 +1,171 @@ + 5 + 8 32 + 21 22 17 16 17 24 17 15 25 18 18 21 19 23 24 25 25 16 22 20 20 + 20 20 21 24 19 22 15 20 17 17 22 + 18 24 18 22 19 25 23 15 24 22 19 19 20 25 23 25 20 16 22 24 23 + 17 24 18 18 22 15 20 17 19 15 22 + 24 20 20 15 21 15 21 22 19 16 16 19 21 21 15 17 24 17 19 18 21 + 25 17 24 21 24 25 17 19 24 21 22 + 21 20 16 21 20 18 22 17 18 19 16 15 21 24 23 19 20 20 16 16 21 + 17 17 20 22 21 16 16 15 17 24 24 + 20 19 20 25 17 22 17 18 20 23 20 16 17 24 18 16 20 23 22 15 15 + 23 18 21 25 20 18 19 24 25 17 16 + 17 24 22 23 17 20 19 16 24 21 25 16 25 23 22 23 15 15 15 20 20 + 21 23 24 21 25 23 22 25 24 21 17 + 15 22 23 24 17 23 16 16 18 19 15 15 23 18 24 25 18 25 18 15 16 + 22 19 18 19 22 18 23 16 15 25 25 + 20 18 18 24 25 20 16 19 25 24 25 24 15 22 21 23 15 24 17 15 24 + 16 25 19 19 22 17 16 15 20 20 18 + 12 24 13 15 19 7 6 25 15 19 12 24 24 25 15 19 15 24 8 18 9 + 23 10 8 11 10 18 21 20 14 20 16 + 10 20 10 24 10 25 11 11 23 14 6 16 5 20 15 11 11 19 5 7 25 + 9 5 24 6 13 13 25 19 18 22 7 + 24 6 16 19 18 9 20 23 19 23 15 10 25 25 12 17 16 8 10 9 9 + 21 19 11 14 22 20 23 23 9 8 25 + 17 19 11 25 24 11 16 8 22 18 5 6 21 22 19 6 14 14 13 12 21 + 20 8 12 25 11 13 20 22 22 15 8 + 8 8 19 24 25 20 18 22 9 21 19 18 22 5 6 6 23 15 12 25 14 + 10 18 14 10 5 22 7 17 16 21 13 + 10 23 10 17 19 7 11 22 25 19 12 25 5 20 9 17 11 24 7 13 23 + 19 25 7 6 13 9 5 15 7 21 7 + 6 6 20 5 21 7 13 7 11 7 19 16 15 22 19 13 24 12 8 25 17 + 12 14 5 11 9 18 5 11 22 14 12 + 13 21 7 8 24 15 9 6 16 5 6 10 23 20 8 24 13 9 7 23 6 + 21 25 9 6 17 21 6 8 17 18 25 + 51 45 52 50 49 46 42 44 + 8 32 + 17 18 21 22 19 25 21 18 16 23 15 19 23 17 15 23 20 15 17 21 25 + 16 15 15 22 20 20 21 25 20 18 24 + 17 22 23 17 24 25 21 16 20 23 22 18 15 24 19 25 16 19 18 21 21 + 15 25 20 15 25 23 19 19 25 19 21 + 20 19 19 24 17 24 21 19 17 15 18 16 19 18 15 21 18 18 24 23 15 + 24 18 22 17 20 23 17 17 17 24 22 + 21 17 21 20 16 22 22 23 17 25 23 25 16 21 24 25 25 18 16 23 22 + 22 18 15 16 25 21 18 18 22 17 17 + 25 20 17 19 24 22 18 16 18 15 25 20 24 20 20 16 19 23 15 19 19 + 21 24 24 23 22 25 23 23 21 20 22 + 15 15 15 21 24 16 20 19 19 24 18 20 17 24 21 23 23 22 19 17 15 + 19 20 17 15 17 18 20 18 22 16 25 + 25 18 21 23 16 18 19 24 16 23 20 18 25 24 25 16 18 16 17 19 25 + 20 16 24 15 25 23 25 16 18 19 18 + 15 20 24 20 17 15 21 25 15 22 25 23 15 19 20 24 22 25 16 18 21 + 23 23 18 20 23 20 15 19 23 22 18 + 15 5 24 5 15 11 10 6 25 19 8 10 14 22 17 8 19 20 8 8 22 + 12 12 18 15 17 9 14 9 11 9 25 + 24 11 18 21 25 15 9 22 11 25 16 23 25 16 16 6 12 5 22 15 19 + 25 13 18 25 22 18 11 17 12 15 11 + 12 21 14 8 25 6 18 18 20 18 8 11 11 20 16 24 13 23 7 22 12 + 24 13 7 10 8 22 22 22 24 20 13 + 23 5 9 6 11 8 18 19 21 8 7 14 11 12 24 7 21 6 14 12 13 + 5 22 25 20 9 8 5 10 13 17 5 + 7 10 21 12 18 6 20 13 10 11 9 18 7 21 6 19 7 11 12 10 14 + 12 21 10 19 21 25 8 18 18 18 19 + 14 18 15 23 17 8 25 14 24 9 7 18 11 5 11 13 18 25 20 17 21 + 23 22 9 18 8 7 5 6 7 14 15 + 20 9 21 13 19 21 5 18 22 11 8 20 21 19 6 20 10 15 19 13 20 + 20 5 13 11 22 12 24 5 24 20 12 + 19 19 14 19 9 15 23 25 5 13 15 16 25 23 21 22 14 24 16 20 16 + 8 24 15 14 20 10 15 14 18 7 22 + 44 54 51 40 45 46 49 54 + 8 32 + 24 16 22 24 16 25 18 23 20 22 24 25 25 23 24 25 19 22 15 22 19 + 24 18 15 16 19 21 18 20 17 19 24 + 16 15 22 18 16 19 23 23 15 18 17 23 19 16 18 17 21 25 17 23 16 + 16 18 15 21 20 23 22 18 22 24 22 + 18 25 21 21 25 17 22 15 24 17 19 20 25 16 23 20 19 20 24 22 15 + 20 24 22 18 24 23 19 16 16 16 22 + 24 16 18 18 18 21 17 18 23 16 17 15 22 17 25 15 20 17 18 16 17 + 18 25 20 17 24 22 22 18 24 21 24 + 24 15 19 22 16 17 15 24 23 25 15 15 17 24 21 18 17 20 18 15 23 + 18 20 20 21 23 22 22 23 17 24 23 + 24 15 16 18 24 24 23 15 23 23 18 22 24 25 21 25 18 24 19 22 25 + 16 17 24 18 25 17 15 24 19 21 23 + 20 19 16 23 25 23 22 15 15 17 17 19 23 15 23 21 17 16 18 18 16 + 20 19 16 18 23 25 19 16 20 15 18 + 24 25 25 17 18 20 18 19 23 16 25 16 19 20 16 18 18 16 20 21 15 + 17 23 25 16 20 23 19 16 18 20 19 + 5 15 18 19 13 21 9 25 10 17 23 13 18 8 12 19 12 10 6 10 25 + 18 10 19 9 19 24 22 10 19 22 18 + 18 18 17 23 5 9 21 21 10 21 13 5 20 18 10 14 17 15 25 17 7 + 13 16 14 6 12 16 14 10 13 9 11 + 17 18 14 25 22 23 9 13 25 6 18 11 20 19 12 16 8 5 23 11 13 + 16 21 18 5 25 5 20 21 22 13 9 + 19 21 18 17 14 23 12 22 20 19 15 23 8 23 20 5 20 15 22 11 8 + 20 8 23 7 23 16 11 23 5 20 24 + 11 7 24 11 10 6 13 9 5 8 16 21 23 12 16 21 20 9 9 16 20 + 18 17 24 14 20 8 11 7 18 16 17 + 16 16 9 22 19 19 10 23 12 12 6 17 11 25 24 9 6 16 18 23 9 + 7 11 22 11 14 15 9 10 23 8 7 + 7 21 22 16 24 21 8 15 15 16 11 11 6 5 24 18 13 13 24 6 19 + 5 7 23 7 12 6 6 17 17 5 9 + 12 13 10 5 7 18 6 22 12 8 7 10 10 13 21 24 6 21 10 23 5 + 10 14 14 13 6 9 11 21 6 16 7 + 49 45 50 53 45 45 42 39 + 8 32 + 25 24 16 15 15 17 25 24 21 21 15 22 19 25 23 25 17 19 19 17 18 + 19 23 16 21 22 21 22 23 23 25 16 + 18 19 19 19 23 24 23 18 25 23 21 16 15 19 15 20 18 19 25 23 25 + 15 19 19 17 25 19 24 20 18 25 21 + 15 22 19 25 17 20 18 15 15 16 23 16 24 21 23 20 21 15 24 19 25 + 21 17 20 16 19 20 16 23 25 15 15 + 25 22 15 19 19 19 25 19 22 20 15 24 21 17 21 16 22 22 18 21 21 + 24 21 19 19 24 25 22 22 17 18 20 + 23 19 21 19 19 22 25 17 19 24 19 16 25 19 24 17 18 20 15 21 20 + 19 21 15 25 18 25 20 19 18 25 25 + 16 16 19 19 23 17 22 20 21 23 19 17 19 22 16 15 17 15 19 19 20 + 20 19 18 23 21 17 24 15 21 21 18 + 15 20 24 19 16 20 20 18 23 19 25 24 21 16 23 23 20 21 24 18 25 + 18 20 24 22 22 18 21 20 15 17 18 + 18 16 16 22 25 20 24 17 22 23 20 21 21 20 25 21 22 15 24 18 25 + 15 19 24 23 17 19 22 21 21 20 16 + 14 24 25 5 23 6 13 9 23 5 5 22 25 13 10 20 6 6 13 16 6 + 11 13 19 22 7 12 14 11 6 7 6 + 25 9 20 21 22 15 17 18 10 13 7 16 23 16 6 25 18 15 5 24 19 + 6 24 23 22 15 17 24 8 11 17 19 + 8 6 6 18 19 8 5 19 5 18 15 21 20 9 9 23 13 7 25 6 22 + 10 12 13 8 20 22 5 8 13 19 5 + 16 15 9 6 21 22 9 6 8 19 20 23 21 22 17 10 24 7 6 19 16 + 11 20 16 18 23 5 7 9 8 14 11 + 10 10 16 12 12 9 9 18 25 22 7 17 19 10 6 20 9 21 12 12 23 + 18 16 25 6 11 23 5 14 5 25 17 + 8 6 24 23 14 8 17 18 19 19 22 11 16 6 15 16 7 5 10 20 20 + 24 23 14 16 20 23 6 16 23 12 15 + 19 12 11 24 7 17 14 11 22 10 20 19 20 12 20 18 24 18 13 13 23 + 19 12 24 8 8 11 5 16 11 21 12 + 24 13 25 19 8 15 11 9 6 21 14 24 8 19 21 20 19 11 18 21 5 + 18 25 17 11 6 7 5 20 14 13 10 + 41 53 41 45 46 49 49 47 + 8 32 + 16 23 19 24 20 19 15 16 23 25 17 18 22 16 17 18 19 23 25 22 16 + 17 15 22 21 22 24 17 16 24 19 15 + 20 18 21 15 18 23 16 18 22 22 18 24 20 15 15 17 23 18 25 16 20 + 19 23 17 22 22 17 17 17 17 17 24 + 25 24 20 17 22 17 25 25 16 19 15 20 20 17 20 25 20 21 20 21 19 + 19 15 20 18 21 21 25 21 18 15 19 + 18 20 16 18 15 22 18 21 17 20 22 15 20 15 17 23 15 17 21 23 18 + 23 23 17 16 18 25 23 24 19 25 19 + 17 16 19 15 18 21 19 20 23 19 19 18 18 21 15 18 18 18 21 18 17 + 19 22 25 18 24 18 24 16 20 17 22 + 17 24 18 20 16 23 23 19 17 19 16 22 17 19 23 19 24 23 25 25 19 + 23 22 25 15 24 22 18 20 23 19 16 + 16 15 18 17 17 15 19 15 22 22 15 17 25 23 20 15 22 24 20 23 16 + 17 15 20 21 16 20 25 24 20 20 24 + 15 22 24 17 19 20 23 24 18 16 25 22 17 15 21 15 15 15 21 16 21 + 23 17 19 25 21 24 19 17 18 15 15 + 9 20 14 17 13 17 12 10 11 12 6 5 24 6 21 23 11 16 19 14 18 + 22 12 10 25 10 25 21 23 25 16 20 + 14 16 14 25 24 23 8 24 22 11 10 25 24 19 14 8 23 17 15 25 25 + 13 6 14 21 20 11 10 21 17 7 23 + 17 17 21 20 5 14 16 25 11 22 9 9 22 23 19 14 18 17 24 18 8 + 14 19 22 10 24 21 10 16 9 6 9 + 25 18 11 5 23 18 21 23 17 19 10 24 20 20 5 12 21 16 17 24 5 + 9 24 17 21 18 6 24 19 13 9 21 + 15 9 10 24 12 5 19 11 17 22 16 16 5 25 6 8 8 14 11 8 12 + 24 7 25 6 5 19 23 9 11 13 10 + 21 19 8 17 13 8 16 8 13 20 22 10 15 22 16 23 10 24 9 20 21 + 21 6 16 22 15 22 8 15 17 16 6 + 25 12 21 6 18 20 10 14 11 5 23 13 13 8 5 10 10 18 17 24 22 + 10 7 6 5 23 15 10 11 18 15 11 + 25 10 7 9 21 15 7 16 17 21 24 25 11 13 7 20 24 25 9 5 25 + 21 7 13 20 10 15 8 20 10 8 22 + 50 54 50 53 42 49 43 49 diff --git a/tests/GeneralizedAssignmentProblem/gap7.txt b/tests/GeneralizedAssignmentProblem/gap7.txt new file mode 100644 index 0000000..5c06b9a --- /dev/null +++ b/tests/GeneralizedAssignmentProblem/gap7.txt @@ -0,0 +1,171 @@ + 5 + 8 40 + 22 21 20 16 15 17 18 15 24 16 18 16 23 16 18 15 17 17 23 21 17 + 19 22 22 18 16 25 18 25 21 23 23 15 19 16 20 15 18 23 23 + 20 25 24 17 20 19 23 22 17 16 19 24 18 18 19 24 16 25 20 20 24 + 22 23 18 17 16 15 23 23 16 15 20 22 22 25 20 24 17 24 24 + 22 24 17 20 21 18 16 22 24 22 24 18 16 20 15 15 24 16 21 15 20 + 18 17 15 21 15 22 18 22 17 24 21 18 16 20 15 16 19 19 21 + 19 24 24 19 17 18 25 16 20 23 22 18 16 15 16 21 25 16 25 22 25 + 15 19 20 16 25 17 23 23 16 25 22 22 22 20 16 22 15 20 20 + 22 20 24 21 24 21 24 20 21 25 22 19 17 20 23 23 20 24 23 16 19 + 23 20 22 19 21 20 22 19 23 21 17 21 22 24 17 22 18 15 21 + 20 20 18 20 22 15 20 16 25 22 19 25 17 23 18 22 24 24 15 25 23 + 18 15 18 17 20 16 20 15 22 18 25 18 17 21 17 24 17 24 22 + 25 24 22 25 17 19 23 19 16 15 15 16 21 22 23 15 20 23 22 20 16 + 24 20 24 25 15 21 15 25 18 16 15 24 16 15 17 17 17 15 15 + 21 22 25 18 25 15 24 15 25 24 15 18 16 15 17 18 15 19 22 24 25 + 21 23 24 17 24 20 23 20 22 24 16 25 25 18 15 24 23 24 22 + 9 25 5 12 14 14 19 25 9 21 13 17 19 9 12 10 17 8 13 8 13 + 7 25 17 7 19 11 6 15 21 6 9 22 9 20 21 7 7 12 18 + 23 8 15 23 7 7 10 7 16 25 9 11 23 22 9 12 17 5 21 13 20 + 25 8 22 9 13 10 7 15 8 19 6 22 14 22 17 8 14 19 23 + 20 14 16 12 19 5 20 11 18 14 23 19 8 17 22 13 5 19 15 20 22 + 20 23 17 11 5 23 12 6 15 14 24 25 17 17 19 18 7 10 19 + 17 19 25 20 9 7 20 11 22 23 5 16 9 18 21 24 22 8 13 25 18 + 10 25 11 9 23 5 17 20 25 22 18 24 17 7 11 5 23 9 14 + 19 24 5 8 5 11 8 14 14 14 10 6 10 25 13 14 24 16 8 24 16 + 19 15 18 13 22 18 21 12 10 13 11 14 7 21 6 11 16 12 24 + 18 24 20 21 13 14 13 23 5 22 11 10 5 7 12 7 12 11 25 20 13 + 11 6 10 5 5 23 22 14 11 10 14 14 24 12 8 9 19 23 25 + 16 17 18 14 20 11 25 14 20 5 6 16 8 13 20 10 14 15 14 17 19 + 17 15 18 22 10 24 23 17 11 18 5 13 21 7 25 14 6 21 6 + 7 19 14 25 18 13 18 17 22 10 9 7 13 14 9 25 13 7 8 11 9 + 6 22 9 14 6 11 16 8 17 5 6 20 6 21 9 21 18 17 12 + 55 58 63 64 57 57 60 53 + 8 40 + 15 22 24 17 15 16 23 24 16 20 25 18 21 15 19 25 16 15 16 24 17 + 16 22 18 15 15 16 15 17 19 19 20 15 19 23 21 23 16 19 16 + 18 20 25 17 22 22 18 22 20 23 16 21 21 24 21 25 21 20 16 17 22 + 18 18 22 15 16 16 16 17 25 19 20 21 15 21 25 18 24 24 21 + 20 17 22 16 24 23 18 22 19 20 25 19 21 25 18 24 24 17 15 17 21 + 16 25 16 18 21 22 23 21 20 15 23 23 25 23 19 19 22 21 17 + 17 24 25 21 21 22 16 20 15 15 24 21 16 20 24 19 18 21 21 17 20 + 16 25 21 15 25 18 16 15 23 15 20 16 23 21 20 21 25 17 25 + 25 25 25 21 17 25 16 23 17 19 16 25 22 23 21 25 22 25 20 22 22 + 17 19 24 22 18 16 17 25 17 25 16 17 21 19 16 19 16 21 20 + 16 19 18 23 16 18 19 20 15 16 21 24 15 20 19 24 21 15 24 16 23 + 20 20 22 15 17 19 17 20 24 24 19 19 23 24 25 22 18 21 21 + 19 21 20 16 15 17 19 18 23 16 25 24 20 17 18 23 24 23 16 17 19 + 20 16 21 17 15 21 22 18 21 20 18 19 20 25 25 15 20 19 15 + 18 24 21 24 16 25 21 23 24 24 25 21 20 18 15 25 22 22 24 20 15 + 17 20 23 23 17 20 15 17 19 22 18 16 22 18 22 22 22 23 23 + 23 19 6 12 18 17 5 12 7 11 12 15 21 16 19 11 23 7 11 13 10 + 24 8 16 14 8 20 18 16 25 12 21 12 20 20 8 10 5 14 6 + 8 9 10 7 17 20 10 8 23 18 9 18 23 8 7 20 10 21 18 19 10 + 8 10 6 23 7 6 17 24 22 22 9 21 17 8 6 16 21 10 14 + 7 22 11 19 13 10 21 14 21 7 21 19 24 10 9 11 11 25 22 16 18 + 25 16 8 16 18 10 17 17 21 23 17 15 20 10 16 24 14 13 12 + 8 11 24 20 9 8 24 22 18 19 12 12 5 12 19 13 14 16 6 10 18 + 20 9 7 21 17 14 15 20 19 19 20 25 23 10 13 13 23 12 8 + 9 8 23 14 11 9 7 25 25 16 14 8 24 11 15 22 7 17 10 20 25 + 11 5 16 12 12 17 21 14 14 6 23 22 9 6 8 14 8 15 23 + 16 25 5 21 23 5 9 7 21 19 24 6 25 9 11 7 17 20 24 17 8 + 13 23 23 21 11 17 10 22 13 7 5 11 21 21 12 16 11 15 14 + 16 11 12 10 21 9 24 20 19 18 6 20 21 9 15 24 13 25 18 6 18 + 6 19 11 12 6 20 5 8 18 15 21 15 23 14 17 15 6 25 16 + 8 19 23 9 12 6 22 14 12 23 7 19 16 5 16 6 18 11 9 15 18 + 8 17 18 5 7 15 6 13 12 5 10 22 23 17 11 19 18 6 11 + 56 56 64 60 57 60 60 53 + 8 40 + 25 18 19 21 21 18 22 19 18 25 17 18 22 25 24 22 16 17 24 19 19 + 23 15 15 25 21 16 22 16 15 19 18 22 20 21 17 15 21 19 24 + 16 21 25 22 19 25 24 16 15 25 20 25 17 25 24 17 22 22 24 22 24 + 24 16 24 25 21 24 21 23 16 16 16 25 24 20 22 23 19 19 22 + 23 19 18 24 16 23 18 21 22 22 24 19 24 23 21 24 15 17 15 16 20 + 19 25 22 23 21 24 21 16 18 22 22 17 22 24 24 18 19 17 25 + 24 19 23 24 24 25 21 23 22 23 16 25 23 15 24 21 15 17 23 23 16 + 21 21 22 18 22 19 21 16 16 15 24 16 21 25 25 15 22 25 19 + 17 25 18 20 23 19 25 23 17 24 19 16 25 15 24 25 20 19 22 21 22 + 21 25 17 15 24 23 23 16 21 25 19 16 24 19 24 20 22 23 25 + 22 20 17 20 17 17 21 21 23 15 21 25 21 22 16 22 20 15 19 15 23 + 25 15 23 24 15 19 15 16 15 25 22 16 21 23 20 24 18 18 18 + 25 23 15 20 18 15 17 25 20 25 24 17 18 18 23 16 18 21 23 24 15 + 16 19 23 19 23 25 20 20 21 18 25 25 23 19 18 17 25 24 15 + 18 15 16 18 18 25 23 17 23 19 25 19 19 22 25 19 19 25 18 21 16 + 16 25 25 19 15 15 20 18 19 16 16 18 21 25 18 17 24 24 22 + 11 23 22 17 8 10 20 7 5 19 17 10 24 10 14 23 14 10 5 7 24 + 5 19 7 11 8 14 11 8 10 25 7 19 9 15 9 20 24 25 12 + 9 20 25 23 25 21 24 9 13 22 20 21 18 12 19 22 13 5 18 24 11 + 18 8 21 14 12 17 11 22 12 24 17 25 8 23 25 10 13 23 5 + 24 18 16 5 17 6 15 21 22 21 22 14 6 17 13 20 23 19 24 23 22 + 22 9 17 14 10 6 8 12 19 13 13 6 15 5 15 11 14 21 12 + 13 11 17 22 10 11 25 23 10 20 21 11 16 15 9 24 5 22 8 18 25 + 23 5 15 13 24 21 15 20 12 24 22 9 17 20 20 13 7 21 14 + 11 7 22 8 20 24 21 9 14 21 12 12 16 13 14 5 16 8 16 12 9 + 17 13 14 23 23 11 10 8 9 20 19 6 19 20 14 25 10 18 10 + 20 19 20 6 22 11 11 10 16 15 24 20 18 20 25 5 14 13 9 21 21 + 20 22 14 22 6 17 18 9 17 17 19 6 14 13 5 5 21 7 5 + 14 5 24 25 18 5 20 24 16 11 7 9 18 16 21 12 9 17 6 8 10 + 18 8 17 19 7 25 6 24 19 10 6 13 12 15 14 8 11 21 13 + 7 14 9 12 12 8 24 15 21 23 9 5 13 7 14 21 18 12 16 10 10 + 22 18 24 11 19 8 5 9 20 25 18 18 21 9 18 19 12 11 22 + 55 68 61 65 57 59 56 58 + 8 40 + 24 23 16 21 15 23 24 19 21 19 18 21 20 16 21 15 20 25 21 24 24 + 19 22 19 22 15 23 24 18 21 22 25 18 24 22 16 18 23 21 19 + 22 23 25 19 18 21 22 24 23 16 19 23 15 25 20 21 17 24 24 25 25 + 23 19 23 21 16 21 15 16 17 19 17 19 22 25 21 25 18 21 25 + 21 17 23 15 20 25 24 22 25 15 18 21 17 25 20 18 21 24 15 25 18 + 15 22 24 24 23 23 17 21 20 16 21 23 17 18 25 24 21 25 25 + 22 18 15 21 16 24 15 18 20 22 17 23 25 21 22 21 15 23 16 23 16 + 17 25 15 15 17 15 19 17 25 23 25 22 23 17 24 15 16 16 17 + 25 19 24 25 21 15 15 15 25 18 19 21 20 18 19 20 18 18 16 20 23 + 25 23 16 21 18 16 15 15 24 18 20 21 18 23 24 17 16 20 18 + 17 21 22 16 15 23 20 21 16 17 25 18 16 17 15 22 24 21 16 23 23 + 20 17 15 22 22 21 19 15 16 25 15 20 22 22 25 18 25 20 18 + 20 18 22 18 15 20 23 21 17 15 16 18 25 22 22 18 23 23 15 21 25 + 22 23 20 21 15 16 22 21 25 25 25 19 21 25 19 21 20 24 20 + 24 17 22 17 15 17 17 25 19 21 15 22 18 19 25 21 22 20 16 24 20 + 19 17 16 20 23 16 15 17 25 25 17 25 24 18 24 16 22 16 17 + 24 18 10 18 12 16 20 24 13 25 24 14 14 14 14 17 19 19 12 23 21 + 15 15 25 6 23 10 18 19 23 22 22 8 21 22 17 22 25 19 7 + 21 9 20 7 22 18 11 10 20 24 25 17 19 22 8 18 21 7 24 7 17 + 24 6 24 16 13 6 7 21 6 7 6 6 17 7 10 23 21 19 13 + 11 20 21 18 14 10 14 20 20 10 17 11 19 12 25 6 20 21 11 6 12 + 8 12 8 6 19 23 13 12 7 18 16 22 18 14 23 24 25 5 6 + 13 16 16 13 15 15 12 20 20 20 23 19 24 24 6 20 17 23 13 16 21 + 16 25 19 8 22 16 5 22 21 10 11 20 16 5 15 7 11 9 17 + 11 21 19 23 16 12 5 16 6 8 18 9 13 8 25 17 14 12 22 11 15 + 15 15 23 9 12 16 20 19 17 6 9 13 17 15 14 9 23 15 16 + 10 23 15 22 12 5 10 18 10 6 24 15 25 17 24 9 25 7 12 17 10 + 8 15 12 8 9 11 8 18 17 7 18 23 20 19 13 20 24 11 25 + 9 14 20 21 9 13 20 10 9 20 18 7 18 5 25 21 21 6 8 5 17 + 25 10 20 20 7 8 9 21 7 14 25 5 23 17 22 13 16 20 20 + 14 8 14 8 7 24 24 15 15 13 12 23 13 24 25 19 25 17 9 11 16 + 11 25 21 23 24 12 6 7 25 24 24 18 24 15 24 9 5 8 16 + 71 59 59 64 58 60 59 65 + 8 40 + 15 15 25 25 24 21 16 19 20 17 24 24 19 20 20 20 22 17 20 15 17 + 17 20 15 18 19 25 18 16 16 16 25 16 20 22 25 24 25 15 21 + 20 18 17 18 17 15 25 23 16 23 17 15 21 17 21 23 24 19 18 24 22 + 20 18 18 22 15 17 19 25 20 19 22 22 23 25 22 19 24 21 18 + 25 20 20 25 15 17 20 17 17 18 22 18 21 17 21 21 20 25 23 15 16 + 24 22 17 23 25 15 25 24 23 16 24 20 18 23 24 17 25 19 20 + 21 21 17 25 20 18 15 20 22 21 22 17 24 25 25 23 20 16 17 20 19 + 25 22 15 18 18 23 15 18 15 22 18 25 18 16 21 22 17 19 23 + 17 19 16 20 16 22 16 15 21 22 23 23 20 23 16 25 19 21 20 22 15 + 19 23 17 23 20 15 18 15 15 24 24 25 15 17 21 23 20 19 16 + 23 20 25 24 21 20 22 24 17 20 17 19 20 23 22 24 20 20 23 24 24 + 24 20 21 20 15 19 20 16 25 21 23 21 21 18 23 18 16 22 22 + 16 22 15 22 15 18 19 18 24 16 17 18 19 15 18 19 15 15 19 21 16 + 22 23 16 21 20 21 21 18 20 23 22 22 23 15 20 17 23 23 18 + 21 24 15 19 23 15 16 22 15 23 17 25 21 22 25 17 24 20 17 15 24 + 19 18 25 20 21 22 18 20 16 18 18 20 24 19 15 23 18 21 16 + 7 7 8 8 17 18 22 12 16 12 11 20 22 12 16 6 25 18 8 13 7 + 15 13 20 8 13 7 12 14 22 22 16 8 15 19 24 25 10 16 6 + 14 5 20 20 23 18 17 7 16 12 6 5 22 25 18 5 25 16 19 7 21 + 12 6 12 23 20 16 5 15 14 15 18 19 10 5 22 6 10 22 17 + 9 24 18 24 24 19 8 16 19 11 16 17 24 12 15 15 5 25 18 15 13 + 21 18 7 15 22 10 16 21 22 7 14 20 24 5 25 22 22 19 21 + 9 22 14 21 6 16 20 22 9 17 11 24 9 13 20 11 11 16 11 10 8 + 16 20 7 8 6 13 12 8 23 10 16 18 19 21 8 19 14 7 25 + 14 7 7 5 6 18 16 18 9 18 8 9 21 18 22 5 8 6 23 6 6 + 6 24 12 18 23 7 20 12 16 24 24 8 25 6 17 11 25 24 10 + 8 10 21 15 14 5 18 15 5 8 12 17 5 14 20 24 9 18 23 12 18 + 14 13 21 24 14 13 8 7 10 12 10 20 14 10 21 19 15 15 17 + 21 9 10 24 13 7 14 25 18 19 6 19 22 13 18 14 7 6 14 23 15 + 21 15 23 16 20 19 20 20 16 15 21 10 6 11 22 8 13 9 21 + 18 7 17 12 5 16 21 8 6 20 18 23 7 18 5 18 5 8 8 13 24 + 22 16 25 8 7 5 5 18 12 22 23 11 17 14 24 20 23 20 10 + 57 58 67 57 56 56 62 57 diff --git a/tests/GeneralizedAssignmentProblem/gap8.txt b/tests/GeneralizedAssignmentProblem/gap8.txt new file mode 100644 index 0000000..f0c1163 --- /dev/null +++ b/tests/GeneralizedAssignmentProblem/gap8.txt @@ -0,0 +1,251 @@ + 5 + 8 48 + 21 25 18 18 21 25 22 18 18 23 17 24 16 21 24 20 23 24 23 24 19 + 24 21 20 25 24 22 23 18 25 20 17 17 20 17 17 23 19 18 15 19 24 + 24 25 16 23 17 18 + 19 16 22 23 24 21 18 18 17 17 25 21 24 17 17 22 15 24 18 21 21 + 23 19 24 19 22 17 18 24 24 21 24 16 21 23 22 19 20 24 20 19 21 + 24 25 22 15 19 16 + 23 19 16 20 20 18 24 15 24 17 24 21 15 19 22 20 20 24 20 16 17 + 19 18 18 17 24 23 15 16 22 25 24 22 16 25 20 16 20 18 15 24 24 + 15 24 23 24 18 25 + 16 16 21 22 20 22 22 19 25 16 18 19 22 19 18 22 25 20 23 17 18 + 21 16 20 16 15 21 20 18 16 23 16 22 22 18 22 17 15 15 18 15 20 + 15 21 19 23 17 25 + 16 15 22 23 16 23 20 20 23 16 19 16 18 20 18 22 16 15 22 24 24 + 21 22 16 19 22 17 20 20 21 15 15 21 16 16 15 15 16 24 25 19 24 + 22 22 20 19 17 24 + 24 19 21 21 25 24 20 25 21 24 18 21 21 15 23 24 18 23 20 25 22 + 20 17 25 16 22 19 18 22 25 16 16 22 23 22 23 16 21 17 21 20 16 + 15 23 24 24 18 22 + 24 23 18 22 25 18 16 21 24 25 18 16 16 23 25 15 16 19 18 20 19 + 18 24 18 22 16 25 25 22 18 16 17 15 25 24 23 23 21 25 22 24 19 + 16 21 16 15 16 25 + 15 21 23 24 17 23 23 20 18 17 16 25 16 22 20 17 21 18 17 17 18 + 24 24 24 24 18 20 21 23 24 19 18 18 19 22 16 23 16 17 22 18 21 + 24 25 25 22 18 19 + 7 6 8 6 13 16 9 14 15 5 10 6 10 7 11 10 13 7 11 11 9 + 15 10 11 10 14 16 7 12 12 7 11 15 16 11 8 13 10 5 7 6 9 + 6 5 11 9 13 10 + 10 7 5 10 16 14 15 10 16 15 16 16 5 12 16 6 12 12 10 9 15 + 11 13 8 12 10 13 14 12 13 9 7 8 14 6 14 15 12 10 9 7 7 + 9 16 6 5 13 13 + 16 8 13 16 16 11 5 14 10 5 12 13 12 15 16 5 16 5 15 6 7 + 9 13 13 11 9 14 13 8 12 5 13 8 9 14 7 13 14 8 9 14 14 + 12 10 10 5 14 8 + 15 7 5 7 14 15 12 6 5 9 13 16 10 6 15 9 15 5 16 6 11 + 13 15 8 13 9 12 13 14 15 12 14 8 14 6 12 15 8 12 5 10 6 + 14 7 16 14 10 9 + 8 10 9 14 7 10 7 12 10 13 16 5 14 15 7 12 16 13 11 10 5 + 10 15 10 8 5 8 7 6 6 6 15 7 6 14 12 9 6 6 16 12 15 + 15 10 8 16 7 5 + 13 9 11 13 5 8 13 7 10 8 10 11 5 15 14 6 8 13 8 8 9 + 12 6 11 15 6 15 7 16 16 13 16 8 15 7 5 15 11 12 5 11 13 + 12 9 10 7 10 13 + 16 15 14 10 8 14 8 11 11 8 11 8 16 8 12 8 16 12 15 12 6 + 9 11 5 5 8 16 16 7 14 11 7 11 14 15 8 13 14 11 7 12 16 + 6 12 8 15 11 14 + 12 13 7 14 7 10 5 7 8 5 8 9 10 16 6 5 9 5 15 12 7 + 13 10 16 9 10 16 5 16 11 7 10 16 8 15 6 10 12 12 7 7 13 + 5 11 15 8 10 6 + 48 53 52 52 48 50 53 47 + 8 48 + 25 20 25 15 21 17 23 15 21 16 17 23 23 17 21 20 19 17 21 16 17 + 25 20 23 20 16 25 19 23 20 15 24 17 22 19 16 19 19 15 25 18 15 + 20 17 19 17 21 21 + 16 15 21 16 24 19 19 21 20 18 25 15 15 20 18 23 15 23 18 20 15 + 16 21 18 16 25 19 19 20 24 15 16 23 23 16 20 20 23 20 18 25 18 + 21 15 16 15 20 15 + 25 20 21 22 23 21 22 22 23 16 18 24 20 24 21 15 15 16 24 24 22 + 18 25 25 17 23 15 22 21 20 19 16 15 16 24 19 18 21 19 18 20 18 + 21 21 22 21 25 21 + 18 16 23 16 15 18 24 23 17 17 18 25 19 25 22 19 19 17 20 19 16 + 19 22 25 22 23 25 22 17 23 19 24 17 23 18 18 16 24 24 22 20 22 + 21 16 18 18 16 20 + 23 17 23 20 19 20 17 16 19 24 15 23 18 16 23 15 16 16 15 16 25 + 15 15 15 15 24 22 17 24 20 20 17 16 17 25 25 24 18 24 18 15 21 + 16 21 15 21 24 25 + 25 24 23 17 15 15 19 16 18 25 17 18 17 20 23 18 20 22 25 25 22 + 20 16 25 22 24 18 15 24 24 24 25 17 20 23 20 18 23 20 21 15 23 + 16 24 25 21 16 17 + 25 23 20 15 24 22 22 23 22 21 24 23 16 24 23 16 17 23 15 20 15 + 17 21 19 23 19 19 20 21 17 19 18 22 17 23 15 21 21 20 15 22 24 + 25 22 21 17 20 23 + 25 20 20 19 16 17 25 24 21 25 25 20 22 15 21 17 24 17 24 15 17 + 20 21 22 24 19 22 24 22 23 21 16 22 15 15 15 20 22 19 22 23 24 + 16 23 16 25 17 25 + 12 9 15 14 8 15 5 9 7 7 10 6 13 12 15 10 11 9 11 16 15 + 14 5 16 7 5 11 16 15 6 11 9 7 8 6 10 7 10 13 10 10 13 + 7 12 14 5 5 6 + 16 16 6 9 16 7 9 5 11 9 11 9 13 5 16 16 9 8 11 13 7 + 10 7 15 11 5 10 14 13 13 11 7 11 14 11 16 14 9 9 9 15 7 + 11 15 5 6 10 7 + 13 12 13 13 10 9 7 7 7 12 5 15 12 6 10 12 13 8 12 7 12 + 9 9 15 5 12 12 5 16 16 15 14 11 5 13 6 11 13 6 14 13 7 + 11 10 9 16 10 10 + 8 13 6 7 11 10 11 8 9 13 9 13 16 8 13 12 16 12 16 7 16 + 15 12 5 12 13 6 10 15 11 7 10 15 9 15 12 13 15 5 6 14 9 + 15 14 10 13 12 8 + 9 11 12 9 14 10 15 9 7 16 9 7 13 10 6 14 12 16 8 14 11 + 9 8 13 7 16 13 11 10 6 8 5 12 11 6 14 14 16 9 15 14 11 + 9 7 6 9 14 9 + 5 7 10 10 15 15 14 11 10 12 5 8 8 12 15 12 12 16 9 9 5 + 15 6 11 11 11 8 5 14 6 10 14 16 14 15 14 13 15 5 16 6 11 + 8 10 5 6 7 7 + 13 12 9 10 15 9 6 15 14 10 9 10 9 10 12 8 10 10 13 5 5 + 6 8 15 8 14 8 14 8 9 13 5 7 7 10 12 10 8 13 6 10 9 + 12 12 11 10 10 16 + 16 15 5 12 11 13 11 9 6 7 10 9 13 9 14 5 9 11 6 7 5 + 10 16 5 8 10 15 7 5 16 7 14 11 16 7 6 11 14 16 5 6 8 + 11 12 12 10 14 11 + 48 50 50 53 51 49 48 48 + 8 48 + 24 19 21 15 19 19 20 23 22 23 22 23 17 25 17 22 25 20 20 18 18 + 23 17 17 25 16 24 25 18 24 15 17 15 19 25 20 18 24 19 16 24 19 + 19 21 21 18 20 17 + 23 18 24 17 20 19 20 20 21 25 25 15 17 21 19 19 16 19 24 19 24 + 20 25 16 23 18 18 15 25 22 25 22 19 20 16 24 22 17 19 24 17 16 + 20 16 17 18 21 17 + 21 18 16 24 15 19 15 16 25 21 22 16 22 17 22 19 23 20 17 16 17 + 19 21 21 18 23 21 22 23 17 16 18 20 17 23 25 23 16 25 17 17 15 + 25 19 22 24 25 21 + 25 22 15 17 16 21 21 16 18 24 17 19 19 24 21 23 16 18 20 23 22 + 24 23 19 17 21 19 21 15 19 22 20 23 23 23 18 25 23 17 22 18 16 + 21 24 24 16 21 24 + 20 25 17 19 24 15 15 20 20 16 20 15 22 15 22 16 24 24 15 23 24 + 20 15 19 21 23 21 18 15 25 21 19 23 17 16 20 15 16 24 25 24 19 + 16 22 25 15 23 21 + 15 21 15 20 24 20 18 16 17 17 24 20 20 23 25 20 23 17 23 15 21 + 23 24 24 25 19 17 24 20 19 20 15 17 23 22 18 24 23 20 19 19 21 + 25 19 20 18 22 17 + 19 23 20 15 22 22 21 19 19 16 17 19 15 18 21 23 18 24 16 24 25 + 19 18 22 21 23 23 22 15 21 25 25 19 24 23 16 20 19 25 21 20 20 + 17 25 20 25 22 22 + 21 17 21 16 25 20 17 18 20 17 18 16 22 23 15 21 25 24 20 23 21 + 25 22 20 24 19 20 24 23 19 23 16 19 18 17 18 21 24 18 21 15 18 + 21 21 20 16 19 18 + 7 10 13 9 12 5 11 8 8 5 16 8 6 10 7 9 10 5 8 15 6 + 14 8 13 9 9 6 16 16 13 15 13 16 10 7 13 5 7 7 5 8 13 + 10 10 7 10 15 15 + 10 12 14 6 15 10 16 5 14 10 13 12 10 10 9 9 16 11 6 10 16 + 7 15 6 5 6 7 16 11 5 12 13 10 9 8 10 13 10 7 11 14 16 + 5 12 5 5 9 10 + 12 11 14 13 10 10 8 11 7 8 16 14 5 6 9 13 12 7 11 14 15 + 9 14 15 16 9 14 6 10 15 10 6 8 7 6 11 13 12 11 13 6 8 + 10 15 12 16 9 6 + 11 16 5 7 11 7 16 6 8 6 12 11 7 14 7 5 14 11 6 11 16 + 15 5 5 11 10 11 16 11 15 12 8 6 8 6 13 13 10 8 13 11 14 + 9 7 10 9 13 14 + 12 5 15 7 6 15 12 11 5 16 8 13 6 7 12 6 8 8 9 7 14 + 13 12 14 15 10 10 14 7 9 8 10 11 16 15 16 14 10 5 6 6 14 + 12 9 16 11 5 5 + 8 8 16 15 10 12 9 9 7 13 6 11 6 12 16 12 11 14 16 10 7 + 9 16 7 7 14 7 16 9 9 10 12 5 9 16 11 15 6 11 11 8 5 + 10 5 16 11 12 16 + 15 7 8 15 13 8 6 16 11 15 10 6 14 16 10 5 16 10 10 5 13 + 11 15 16 14 8 7 7 16 5 5 16 5 16 16 12 16 13 13 11 13 9 + 7 9 10 15 7 10 + 10 9 16 6 9 8 9 15 12 13 13 14 9 13 16 8 13 14 14 11 13 + 16 16 14 8 10 5 13 5 5 11 12 15 12 14 16 7 15 6 11 11 11 + 12 15 7 16 8 11 + 47 49 51 49 49 51 53 54 + 8 48 + 24 19 23 23 24 22 23 25 20 17 16 19 21 23 16 17 18 18 20 21 21 + 21 20 19 20 18 24 22 22 18 22 19 18 16 19 18 25 18 18 19 20 21 + 22 18 20 18 20 25 + 18 21 16 19 18 18 23 19 17 20 22 20 25 22 25 17 18 22 20 18 21 + 22 23 23 17 24 16 22 25 25 23 22 22 23 20 20 25 21 15 15 25 22 + 24 24 23 22 25 17 + 20 17 21 22 22 16 22 24 25 15 22 18 25 23 23 15 21 23 18 22 19 + 20 17 22 15 16 19 20 19 21 19 18 24 24 25 16 15 21 15 23 15 17 + 16 24 16 16 25 25 + 18 19 17 23 22 23 22 24 24 15 20 16 20 18 17 18 20 19 19 24 22 + 22 24 22 16 17 19 19 15 22 17 18 25 20 18 17 17 20 16 24 19 19 + 15 16 20 19 23 16 + 21 19 17 18 24 25 25 24 22 20 23 23 20 23 15 21 18 22 22 22 18 + 18 19 24 22 24 21 24 25 15 21 15 23 18 23 18 17 22 15 20 17 17 + 18 15 17 17 23 16 + 15 25 25 21 22 17 19 18 25 20 15 25 16 20 18 16 17 18 16 21 21 + 24 24 15 17 16 19 18 20 17 18 15 18 16 20 16 17 24 20 17 17 19 + 16 18 24 15 16 16 + 15 24 23 24 25 23 25 20 19 16 19 19 19 20 24 22 24 16 15 17 25 + 23 23 16 21 22 16 20 17 25 15 22 15 24 20 22 19 23 23 16 23 15 + 15 17 22 16 22 24 + 20 16 24 21 17 21 25 16 25 21 24 15 18 21 23 15 21 17 21 18 23 + 20 18 19 16 16 21 18 22 24 17 17 15 25 22 25 17 16 19 21 22 19 + 23 21 15 17 15 25 + 16 6 7 15 5 8 11 14 13 7 16 8 7 8 6 15 8 13 8 6 5 + 13 5 9 7 11 11 7 14 9 8 15 9 7 9 14 16 5 7 5 16 5 + 14 5 9 5 10 16 + 7 13 10 7 15 15 16 14 6 13 16 8 5 15 14 9 11 10 9 16 7 + 12 10 7 10 5 13 10 11 9 9 10 8 14 10 7 10 12 15 15 11 10 + 7 15 14 7 15 5 + 15 10 11 10 8 7 8 9 13 7 15 14 13 6 10 10 7 9 7 5 12 + 8 5 16 11 5 15 12 14 11 5 5 13 11 8 8 15 14 11 5 8 11 + 7 15 5 8 16 8 + 8 11 15 7 14 6 9 10 8 10 8 12 7 8 14 5 15 7 6 15 16 + 7 13 13 8 16 7 15 13 5 9 9 8 8 16 12 7 10 5 5 14 14 + 14 9 11 8 10 7 + 12 7 14 11 8 16 16 16 5 7 5 11 5 9 16 9 12 9 16 5 8 + 6 9 15 15 5 15 5 7 8 8 8 10 14 10 5 16 6 12 12 9 11 + 7 15 8 5 15 8 + 5 12 10 12 8 9 12 10 14 9 12 12 6 14 6 6 7 13 8 12 13 + 9 11 7 14 16 6 14 5 11 12 9 12 11 7 14 7 16 11 6 15 7 + 15 9 10 10 14 11 + 14 13 5 7 13 8 11 8 7 13 15 13 6 12 11 8 9 6 9 16 5 + 15 5 14 6 7 10 13 13 16 11 6 7 11 8 15 13 5 15 12 14 5 + 10 11 15 12 8 7 + 13 9 8 14 5 6 10 16 6 6 11 9 7 9 9 11 6 8 10 8 15 + 11 11 15 7 9 5 16 13 9 7 10 16 11 9 14 9 6 13 14 9 15 + 7 13 6 16 14 16 + 46 51 47 48 48 49 49 49 + 8 48 + 16 15 15 23 20 16 21 17 25 21 18 19 15 25 15 16 20 20 17 25 23 + 25 22 21 22 19 23 22 20 18 16 22 25 25 16 16 17 21 18 21 25 18 + 23 18 17 18 16 23 + 21 24 19 25 18 16 22 20 20 23 18 21 17 17 20 24 17 22 17 25 16 + 16 17 16 17 16 24 23 23 20 20 19 20 16 15 24 16 18 18 20 15 22 + 24 20 18 25 15 23 + 20 17 20 25 18 15 19 20 21 21 20 25 21 19 19 23 25 20 18 18 21 + 25 20 22 24 20 22 15 19 24 25 25 16 20 22 17 19 22 20 18 22 21 + 20 20 16 16 25 23 + 16 19 23 19 16 23 25 15 22 22 18 22 20 20 19 17 20 16 25 15 24 + 15 23 18 21 19 15 23 17 15 25 23 16 19 21 18 25 22 21 16 20 19 + 19 21 21 17 24 20 + 24 24 15 23 19 22 23 17 19 21 22 21 15 15 15 24 24 18 16 15 21 + 19 21 21 16 24 17 23 22 17 24 21 19 19 23 23 15 18 19 21 17 18 + 18 17 24 21 17 19 + 23 21 22 22 15 19 23 24 16 17 24 21 21 15 20 20 20 25 23 22 18 + 15 16 23 16 20 23 24 20 18 17 21 20 24 20 16 23 15 18 17 18 17 + 22 23 25 21 18 25 + 24 21 22 17 15 21 23 20 20 21 22 19 24 24 22 24 20 17 16 16 18 + 15 21 16 15 18 21 19 19 20 23 25 20 23 24 21 16 25 20 20 19 16 + 22 19 22 18 18 23 + 22 20 17 22 25 24 23 17 16 16 15 21 24 24 18 22 20 23 22 21 18 + 17 16 16 22 22 21 19 20 18 24 23 24 19 21 15 22 23 19 21 21 21 + 22 24 19 19 24 15 + 11 13 9 7 16 10 5 16 16 12 15 7 8 7 10 7 10 5 11 16 7 + 16 9 12 13 14 14 8 15 8 15 15 13 8 8 8 15 8 6 10 10 5 + 16 8 16 5 14 11 + 6 7 15 6 16 14 6 15 10 8 11 9 13 11 10 10 13 14 16 7 9 + 8 16 13 7 14 6 13 9 7 15 16 5 14 10 10 5 15 14 11 16 7 + 13 16 7 15 11 11 + 14 7 13 8 9 7 11 13 14 14 5 12 9 6 12 11 11 9 11 13 8 + 9 15 7 15 16 10 16 14 13 6 13 5 5 8 16 13 6 12 8 10 5 + 16 14 6 14 12 11 + 9 16 14 11 16 9 7 15 14 13 7 10 7 15 7 13 14 11 10 15 10 + 15 13 13 16 14 11 11 9 14 15 12 16 15 13 12 14 5 6 14 12 11 + 9 7 14 11 16 11 + 7 6 6 11 10 9 9 16 9 14 7 10 10 7 8 12 15 9 9 14 12 + 13 12 16 7 8 6 15 6 16 8 14 6 6 14 16 8 6 10 7 12 15 + 7 15 12 14 10 9 + 12 8 8 11 6 11 9 11 12 12 13 5 14 14 16 5 14 9 9 10 9 + 11 13 11 14 13 7 6 14 6 11 10 12 6 6 11 6 6 13 11 11 10 + 10 12 13 10 10 14 + 15 15 10 12 11 14 7 10 5 13 12 10 13 15 6 8 7 15 15 8 5 + 6 10 7 5 11 7 12 15 12 14 11 11 9 14 10 14 10 5 13 14 6 + 7 16 10 7 7 11 + 11 8 6 9 11 9 12 14 12 12 10 10 6 5 10 14 5 7 9 16 10 + 16 5 7 8 13 16 9 8 5 13 10 5 6 10 6 7 9 13 7 8 13 + 10 6 10 8 13 10 + 51 53 51 57 49 49 50 45 diff --git a/tests/GeneralizedAssignmentProblem/gap9.txt b/tests/GeneralizedAssignmentProblem/gap9.txt new file mode 100644 index 0000000..81a1bd4 --- /dev/null +++ b/tests/GeneralizedAssignmentProblem/gap9.txt @@ -0,0 +1,211 @@ + 5 + 10 30 + 25 16 17 24 15 24 24 17 23 16 21 18 18 18 18 20 16 15 25 15 16 + 23 22 18 23 18 19 20 21 19 + 16 17 19 18 17 23 15 25 25 16 16 23 21 23 25 19 16 18 16 21 24 + 15 21 19 20 16 18 25 20 22 + 19 19 15 25 24 25 16 23 15 20 16 19 18 20 15 17 16 17 21 20 18 + 19 22 20 19 21 18 20 25 17 + 17 21 21 21 19 20 24 15 21 15 18 23 18 16 16 18 24 16 22 16 22 + 19 17 17 22 19 21 16 24 17 + 18 23 23 17 25 21 22 17 20 24 18 25 16 15 16 18 23 17 25 17 17 + 23 24 23 19 16 16 22 22 19 + 24 18 20 18 19 16 22 18 19 23 18 23 21 24 22 25 21 18 21 16 21 + 22 18 22 15 19 16 22 16 17 + 20 21 15 24 20 19 16 24 23 24 22 20 24 18 24 20 17 23 17 22 18 + 21 25 17 21 18 24 21 15 25 + 15 23 19 21 17 16 22 23 16 15 19 21 15 18 18 21 25 15 15 15 20 + 21 18 19 18 21 25 23 25 21 + 17 25 16 24 16 22 16 15 15 17 25 17 20 21 16 16 17 17 25 21 18 + 17 20 19 23 18 17 20 17 17 + 17 21 23 22 23 25 25 22 24 18 24 22 15 24 15 16 19 22 25 19 24 + 17 16 17 17 25 19 16 23 22 + 5 25 21 11 25 10 15 17 10 9 10 23 13 13 23 14 24 17 16 21 22 + 23 7 25 17 17 24 24 7 8 + 25 14 19 21 22 11 19 14 12 22 9 10 7 12 6 9 5 23 24 16 8 + 15 17 22 20 6 18 15 7 7 + 12 14 15 25 18 25 6 7 10 17 12 10 12 19 10 12 12 10 7 21 5 + 5 19 21 12 6 14 6 19 24 + 24 11 18 14 9 13 18 14 11 12 9 14 12 18 8 19 24 13 7 17 22 + 20 24 15 12 12 20 21 6 22 + 15 9 19 9 13 19 25 16 14 17 6 9 15 12 20 21 9 17 19 14 23 + 19 25 22 13 14 14 23 15 23 + 25 22 12 6 11 25 15 13 13 9 9 13 19 10 18 23 14 8 9 19 15 + 21 10 5 23 17 22 11 17 5 + 20 10 18 7 12 14 12 18 8 25 25 14 16 25 23 5 22 22 7 24 12 + 13 5 8 12 25 24 19 15 14 + 15 18 21 17 7 5 10 10 25 13 23 10 7 7 20 18 21 12 24 10 7 + 25 20 13 19 18 16 7 9 6 + 20 21 9 22 18 7 5 21 15 13 8 23 21 21 17 11 24 11 12 15 19 + 8 7 8 18 22 18 12 18 17 + 14 6 10 23 12 23 12 9 20 25 24 23 20 12 25 17 18 20 18 25 17 + 20 19 12 5 6 10 5 7 15 + 40 30 32 37 39 35 38 34 36 37 + 10 30 + 23 21 24 16 25 16 17 25 18 17 19 19 25 15 23 21 15 21 25 22 22 + 24 24 23 25 17 25 24 15 18 + 24 25 18 25 22 18 17 23 22 19 20 17 22 19 23 25 20 21 25 22 23 + 15 16 15 16 24 17 24 17 17 + 24 18 16 19 18 20 20 22 19 21 17 23 21 15 15 25 18 20 20 16 23 + 16 25 18 23 21 25 19 22 25 + 20 23 25 24 22 25 22 16 25 23 23 22 21 23 22 19 18 17 24 24 23 + 15 16 23 19 22 20 21 16 19 + 16 17 16 24 25 19 24 20 15 23 21 16 16 20 25 18 16 20 20 19 15 + 20 21 18 23 21 18 25 24 17 + 17 21 19 21 15 20 25 16 20 16 23 19 20 18 19 16 15 19 15 19 17 + 21 17 19 18 19 20 22 20 24 + 21 19 20 23 24 22 15 15 17 22 16 21 25 22 15 22 18 17 22 25 20 + 21 21 24 22 22 18 16 17 25 + 23 20 19 23 16 19 24 25 15 23 21 15 21 19 23 19 25 24 18 24 17 + 22 22 19 25 17 25 23 15 17 + 19 25 23 18 15 20 16 16 19 24 24 24 18 21 18 18 15 18 17 23 15 + 15 15 16 23 15 20 16 16 17 + 20 17 23 17 19 18 21 24 19 20 16 21 15 25 24 16 20 18 23 15 24 + 18 18 17 21 23 16 22 20 25 + 10 23 8 21 24 19 9 7 20 17 22 25 22 12 23 9 7 14 24 6 22 + 11 18 16 15 7 18 12 18 21 + 15 9 24 13 12 9 23 20 16 25 22 25 20 15 14 17 17 9 25 16 16 + 10 25 10 15 21 5 22 18 10 + 5 5 8 14 8 15 9 18 7 7 13 7 9 11 24 8 8 5 17 21 19 + 16 21 14 9 23 13 22 5 7 + 14 5 11 8 11 22 17 23 11 7 8 10 23 15 13 24 12 14 11 7 20 + 22 12 23 14 19 16 24 16 18 + 10 5 12 10 21 13 14 21 23 19 8 13 14 23 6 14 22 18 17 6 9 + 23 8 6 15 11 13 7 24 9 + 16 22 7 22 13 12 13 20 7 16 17 16 8 25 6 6 18 24 15 18 17 + 22 25 14 22 6 12 12 9 15 + 20 20 15 6 20 8 16 21 18 7 5 16 18 15 16 7 25 5 7 6 19 + 8 10 14 19 22 9 8 23 9 + 19 22 25 25 7 17 19 20 13 11 22 14 20 19 17 24 17 21 11 19 10 + 12 8 15 24 20 22 23 18 24 + 24 13 16 5 14 12 23 25 8 23 19 16 8 25 7 15 14 22 20 21 12 + 6 15 22 7 8 20 13 10 17 + 23 16 15 17 22 5 9 10 19 15 20 21 18 19 18 7 14 13 25 11 6 + 6 5 19 23 10 19 16 21 24 + 38 39 29 36 33 36 32 43 36 37 + 10 30 + 20 19 24 16 25 15 21 24 19 22 18 18 18 15 20 21 22 21 19 20 19 + 17 16 15 20 20 20 25 22 23 + 20 19 18 15 21 21 19 15 21 19 16 20 15 17 25 23 15 24 23 22 20 + 25 21 19 21 20 16 18 18 25 + 24 22 18 25 18 22 22 17 16 18 16 20 19 18 19 23 16 20 20 17 24 + 18 15 24 18 21 23 21 15 25 + 17 17 24 22 19 25 19 15 18 22 22 24 16 15 19 15 25 20 16 20 16 + 20 21 18 18 21 23 15 18 15 + 17 25 15 22 17 15 23 21 23 20 18 19 23 20 25 19 20 22 20 17 23 + 20 20 17 18 24 16 20 22 22 + 24 20 22 23 21 21 22 21 17 24 23 15 16 17 24 23 22 17 23 19 19 + 21 22 24 23 17 21 25 21 17 + 17 20 21 15 19 19 25 24 18 17 21 16 22 16 20 20 18 20 17 22 19 + 17 22 19 20 23 24 20 18 16 + 17 22 19 22 21 20 25 18 22 20 18 23 21 22 19 18 25 19 18 17 23 + 16 22 21 23 19 24 21 15 22 + 24 18 19 18 25 19 15 25 17 22 23 21 19 18 25 23 16 24 25 23 22 + 15 23 15 20 23 23 20 25 17 + 15 17 21 23 16 21 19 23 18 17 25 18 20 15 21 15 15 16 24 25 21 + 18 19 24 22 19 17 20 18 21 + 22 10 24 8 22 13 15 16 22 24 20 22 12 18 6 25 20 16 15 8 24 + 9 9 20 16 14 15 23 10 20 + 6 15 13 22 13 8 19 25 16 11 24 16 24 20 16 10 16 9 15 14 21 + 5 23 8 9 8 22 7 8 6 + 8 6 25 5 17 25 7 11 17 10 23 10 7 20 13 20 6 15 14 10 25 + 21 20 21 20 12 21 20 18 6 + 24 9 9 6 11 5 21 17 10 16 7 6 8 14 9 7 12 8 17 6 20 + 15 17 25 25 19 5 14 12 22 + 14 14 11 21 19 12 16 5 15 7 11 14 23 6 22 6 19 14 8 15 25 + 15 6 5 12 22 18 21 6 18 + 5 22 7 13 21 9 5 23 9 24 22 22 9 22 9 6 13 22 16 19 18 + 21 15 9 20 12 23 13 17 6 + 24 16 12 16 14 11 22 23 18 6 20 9 8 16 19 24 7 10 25 24 19 + 22 5 17 6 13 23 7 24 23 + 8 25 11 19 7 13 15 21 24 20 7 16 16 6 11 25 13 13 12 21 24 + 11 23 22 7 9 20 8 19 15 + 9 22 20 19 17 20 7 15 9 19 6 10 12 25 21 11 6 10 19 15 25 + 8 24 25 16 14 24 20 23 17 + 17 22 6 10 23 21 20 23 8 13 11 21 25 23 9 20 19 8 22 25 24 + 21 5 9 20 23 12 10 15 12 + 39 34 36 31 34 36 38 36 39 39 + 10 30 + 18 24 18 25 18 18 18 17 25 16 21 20 17 20 20 19 20 16 19 20 22 + 20 24 21 18 22 22 24 19 16 + 20 21 23 16 21 18 20 25 15 21 22 21 19 25 20 16 18 25 23 17 21 + 20 17 18 16 21 19 23 16 24 + 18 21 19 15 25 22 15 20 18 24 21 19 25 19 19 15 15 16 25 20 23 + 22 17 23 16 25 16 25 24 17 + 20 22 24 17 19 18 15 15 21 23 22 22 24 17 25 15 25 25 16 24 19 + 25 22 15 18 17 20 24 21 23 + 24 18 24 16 24 21 16 15 19 25 17 16 22 22 24 25 15 19 18 18 22 + 18 23 23 17 20 17 15 23 22 + 21 20 25 17 21 22 23 23 15 23 23 23 18 24 21 25 16 17 23 23 19 + 22 16 22 16 15 22 22 23 24 + 25 24 23 22 17 18 25 18 18 17 17 22 22 24 17 21 18 24 23 21 22 + 22 16 16 23 24 19 16 17 22 + 16 18 25 25 15 22 18 15 19 17 23 20 22 16 19 18 17 20 23 15 21 + 22 19 22 21 18 22 24 21 18 + 20 16 25 19 17 20 15 16 24 17 20 15 22 20 15 24 15 19 22 18 19 + 25 19 21 21 24 22 23 24 19 + 25 22 24 20 18 24 23 17 16 24 16 24 15 24 17 16 18 16 17 21 24 + 21 17 20 16 20 17 16 18 21 + 14 18 20 16 18 17 21 25 16 22 9 25 7 16 24 5 9 13 10 8 24 + 20 21 8 11 22 24 13 13 14 + 25 25 6 5 21 25 24 12 14 19 15 12 19 5 16 8 19 9 11 6 15 + 22 16 7 12 15 21 18 17 5 + 10 8 15 8 12 25 8 19 12 11 16 15 22 25 15 20 16 8 18 21 22 + 17 12 18 5 5 5 24 11 6 + 25 11 23 9 18 18 19 25 25 16 17 24 6 10 17 18 7 14 25 23 9 + 7 12 8 16 17 15 11 24 17 + 12 5 13 14 5 7 10 21 8 12 20 6 15 7 7 24 23 7 25 15 13 + 16 6 23 8 14 10 10 23 13 + 15 17 15 10 24 12 10 8 22 10 18 25 16 24 17 13 16 24 22 13 23 + 22 10 9 19 16 12 15 21 7 + 13 24 17 19 21 11 15 21 11 13 6 19 23 11 16 15 19 14 17 6 11 + 8 16 17 6 15 23 23 14 11 + 15 17 25 23 21 7 24 18 20 24 8 20 7 22 17 17 7 20 15 20 15 + 15 8 9 14 25 20 14 10 16 + 17 13 14 7 16 16 19 22 23 17 24 22 11 13 22 12 22 19 15 6 21 + 14 21 13 21 13 9 21 8 17 + 5 14 21 9 5 9 16 11 24 14 10 22 18 19 16 10 6 12 7 14 12 + 22 12 21 19 16 9 15 8 22 + 38 35 34 38 31 38 36 39 39 33 + 10 30 + 15 20 24 24 22 24 24 17 15 21 18 17 19 16 17 22 19 18 16 19 23 + 15 24 20 15 18 20 21 20 18 + 19 18 21 19 23 16 20 21 23 24 15 23 15 22 19 17 16 17 17 17 20 + 18 16 23 24 21 16 24 20 15 + 23 19 22 23 15 19 23 21 15 18 17 17 16 23 23 22 21 23 17 22 16 + 23 20 19 15 19 15 24 17 17 + 15 16 21 19 21 18 16 20 23 19 20 19 16 23 15 24 20 18 17 16 22 + 22 20 16 24 15 18 17 21 21 + 17 16 17 24 18 15 23 19 20 19 23 24 17 21 25 17 19 25 22 15 18 + 20 24 21 19 21 16 15 19 25 + 19 15 20 24 19 19 17 25 21 25 17 21 16 21 24 25 19 16 22 17 15 + 21 16 21 20 18 17 19 18 25 + 25 20 21 24 22 22 16 19 16 17 25 16 18 20 17 25 18 22 23 17 17 + 24 17 17 25 15 18 17 21 15 + 24 16 22 19 19 23 21 17 25 24 17 24 25 23 23 17 25 25 22 24 23 + 22 19 15 16 24 15 21 19 20 + 15 20 21 17 20 22 19 20 25 21 23 16 17 15 20 15 25 16 25 19 25 + 16 19 15 19 23 19 19 17 17 + 19 25 21 16 24 15 23 19 21 23 15 24 22 25 15 22 23 21 15 17 21 + 25 21 16 25 19 23 19 22 16 + 5 25 11 25 7 15 17 12 17 9 20 14 13 25 5 18 15 13 8 18 15 + 8 19 8 11 7 13 15 7 16 + 11 6 18 10 21 23 15 22 21 10 22 7 24 7 9 19 24 11 20 18 8 + 8 19 14 9 16 10 6 16 7 + 7 7 11 14 20 22 8 22 21 22 10 25 23 19 11 24 8 6 24 18 22 + 12 17 9 13 18 23 16 10 19 + 16 17 21 9 15 24 15 24 17 21 8 18 15 11 19 25 18 9 18 7 17 + 25 19 15 25 19 14 10 6 15 + 24 10 9 22 19 16 11 22 6 23 25 24 15 23 24 15 25 19 24 24 22 + 18 22 17 25 25 10 20 12 20 + 19 16 13 9 7 16 8 16 6 12 9 14 8 14 7 23 5 7 17 25 13 + 10 13 13 5 8 7 21 6 13 + 5 24 6 7 16 22 6 20 16 22 10 13 16 25 17 18 12 21 23 9 9 + 8 10 13 22 8 21 23 22 16 + 15 15 14 13 15 23 20 17 18 6 5 21 18 21 24 19 7 10 9 12 12 + 11 18 23 19 10 16 22 21 19 + 22 18 15 10 17 22 17 14 18 17 14 16 8 20 5 20 16 15 17 25 21 + 25 20 11 10 15 19 6 19 9 + 25 14 6 23 7 14 24 5 21 24 25 21 8 11 22 14 14 7 19 5 20 + 12 24 17 23 7 16 22 22 20 + 32 34 38 39 45 28 36 37 38 39