summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--LICENSE_clp.txt239
-rw-r--r--LICENSE_ipopt.txt87
-rw-r--r--LICENSE_symphony.txt214
-rw-r--r--help/en_US/lsqlin.xml41
-rw-r--r--help/en_US/lsqnonneg.xml37
-rw-r--r--help/en_US/qpipopt.xml45
-rw-r--r--help/en_US/qpipoptmat.xml43
-rw-r--r--help/en_US/scilab_en_US_help/JavaHelpSearch/DOCSbin6899 -> 7094 bytes
-rw-r--r--help/en_US/scilab_en_US_help/JavaHelpSearch/DOCS.TABbin761 -> 781 bytes
-rw-r--r--help/en_US/scilab_en_US_help/JavaHelpSearch/OFFSETSbin264 -> 266 bytes
-rw-r--r--help/en_US/scilab_en_US_help/JavaHelpSearch/POSITIONSbin33375 -> 34656 bytes
-rw-r--r--help/en_US/scilab_en_US_help/JavaHelpSearch/SCHEMA2
-rw-r--r--help/en_US/scilab_en_US_help/JavaHelpSearch/TMAPbin14336 -> 16384 bytes
-rw-r--r--help/en_US/scilab_en_US_help/lsqlin.html27
-rw-r--r--help/en_US/scilab_en_US_help/lsqnonneg.html23
-rw-r--r--help/en_US/scilab_en_US_help/qpipopt.html31
-rw-r--r--help/en_US/scilab_en_US_help/qpipoptmat.html29
-rw-r--r--help/en_US/scilab_en_US_help/symphony.html17
-rw-r--r--help/en_US/scilab_en_US_help/symphonymat.html17
-rw-r--r--help/en_US/symphony.xml27
-rw-r--r--help/en_US/symphonymat.xml27
-rw-r--r--jar/scilab_en_US_help.jarbin205947 -> 208650 bytes
-rw-r--r--macros/lsqlin.binbin50916 -> 57812 bytes
-rw-r--r--macros/lsqlin.sci45
-rw-r--r--macros/lsqnonneg.binbin24024 -> 29824 bytes
-rw-r--r--macros/lsqnonneg.sci47
-rw-r--r--macros/qpipopt.binbin50352 -> 57148 bytes
-rw-r--r--macros/qpipopt.sci51
-rw-r--r--macros/qpipoptmat.binbin52688 -> 59596 bytes
-rw-r--r--macros/qpipoptmat.sci489
-rw-r--r--macros/symphony.binbin56296 -> 59376 bytes
-rw-r--r--macros/symphony.sci25
-rw-r--r--macros/symphony_call.binbin4592 -> 4592 bytes
-rw-r--r--macros/symphony_call.sci14
-rw-r--r--macros/symphonymat.binbin60688 -> 63876 bytes
-rw-r--r--macros/symphonymat.sci33
-rw-r--r--sci_gateway/cpp/.sci_QuadNLP.cpp.swpbin16384 -> 0 bytes
-rwxr-xr-xsci_gateway/cpp/libFAMOS.sobin122920 -> 122920 bytes
-rw-r--r--sci_gateway/cpp/sci_ipopt.cpp2
-rw-r--r--tests/general_tests/lsqlin/lsqlin_infeasible1.sce15
-rw-r--r--tests/general_tests/lsqlin/lsqlin_logical1.sce1
-rw-r--r--tests/general_tests/lsqlin/lsqlin_logical2.sce53
-rw-r--r--tests/general_tests/lsqlin/lsqlin_logical3.sce55
-rw-r--r--tests/general_tests/lsqlin/lsqlin_logical4.sce56
-rw-r--r--tests/general_tests/lsqlin/lsqlin_logical5.sce57
-rw-r--r--tests/general_tests/lsqlin/lsqlin_x01.sce1
-rw-r--r--tests/general_tests/lsqlin/lsqlin_zeros.sce1
-rw-r--r--tests/general_tests/lsqnonneg/lsqnonneg_logical1.sce (renamed from tests/general_tests/lsqnonneg/lsqnonneg_logical.sce)1
-rw-r--r--tests/general_tests/lsqnonneg/lsqnonneg_logical2.sce44
-rw-r--r--tests/general_tests/lsqnonneg/lsqnonneg_maxiter.sce1
-rw-r--r--tests/general_tests/lsqnonneg/lsqnonneg_zeros.sce1
-rw-r--r--tests/general_tests/qpipopt/qpipopt_infeasible.sci8
-rw-r--r--tests/general_tests/qpipopt/qpipopt_logical_1.sce2
-rw-r--r--tests/general_tests/qpipopt/qpipopt_logical_2.sce2
-rw-r--r--tests/general_tests/qpipopt/qpipopt_maxiter.sce1
-rw-r--r--tests/general_tests/qpipopt/qpipopt_x01.sce1
-rw-r--r--tests/general_tests/qpipopt/qpipopt_zeros.sce2
-rw-r--r--tests/general_tests/qpipoptmat/qpipoptmat_infeasible.sci11
-rw-r--r--tests/general_tests/qpipoptmat/qpipoptmat_logical1.sce7
-rw-r--r--tests/general_tests/qpipoptmat/qpipoptmat_logical2.sce5
-rw-r--r--tests/general_tests/qpipoptmat/qpipoptmat_logical3.sce52
-rw-r--r--tests/general_tests/qpipoptmat/qpipoptmat_logical4.sce49
-rw-r--r--tests/general_tests/qpipoptmat/qpipoptmat_logical5.sce46
-rw-r--r--tests/general_tests/qpipoptmat/qpipoptmat_maxiter.sce1
-rw-r--r--tests/general_tests/qpipoptmat/qpipoptmat_x01.sce30
-rw-r--r--tests/general_tests/qpipoptmat/qpipoptmat_zeros.sce4
-rw-r--r--tests/general_tests/symphony/symphony_logical1.sce1
-rw-r--r--tests/general_tests/symphonymat/symphonymat_logical2.sce34
-rw-r--r--tests/general_tests/symphonymat/symphonymat_logical3.sce43
-rw-r--r--tests/general_tests/symphonymat/symphonymat_logical4.sce46
-rw-r--r--tests/unit_tests/lsqlin.dia.ref48
-rw-r--r--tests/unit_tests/lsqlin.tst48
-rw-r--r--tests/unit_tests/lsqnonneg.dia.ref26
-rw-r--r--tests/unit_tests/lsqnonneg.tst26
-rw-r--r--tests/unit_tests/qpipopt_base.dia.ref38
-rw-r--r--tests/unit_tests/qpipopt_base.tst41
-rw-r--r--tests/unit_tests/qpipoptmat_base.dia.ref32
-rw-r--r--tests/unit_tests/qpipoptmat_base.tst35
-rw-r--r--tests/unit_tests/symphony_base.dia.ref1
-rw-r--r--tests/unit_tests/symphony_base.tst8
-rw-r--r--tests/unit_tests/symphonymat_base.dia.ref1
-rw-r--r--tests/unit_tests/symphonymat_base.tst1
-rw-r--r--thirdparty/linux/include/coin/.IpIpoptCalculatedQuantities.hpp.swpbin16384 -> 0 bytes
83 files changed, 2017 insertions, 531 deletions
diff --git a/LICENSE_clp.txt b/LICENSE_clp.txt
new file mode 100644
index 0000000..744d6f3
--- /dev/null
+++ b/LICENSE_clp.txt
@@ -0,0 +1,239 @@
+Eclipse Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
+OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+ a) in the case of the initial Contributor, the initial code and
+ documentation distributed under this Agreement, and
+
+ b) in the case of each subsequent Contributor:
+
+ i) changes to the Program, and
+
+ ii) additions to the Program;
+
+ where such changes and/or additions to the Program originate
+ from and are distributed by that particular Contributor. A
+ Contribution 'originates' from a Contributor if it was added to
+ the Program by such Contributor itself or anyone acting on such
+ Contributor's behalf. Contributions do not include additions to
+ the Program which: (i) are separate modules of software
+ distributed in conjunction with the Program under their own
+ license agreement, and (ii) are not derivative works of the
+ Program.
+
+"Contributor" means any person or entity that distributes the
+Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor
+which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with
+this Agreement.
+
+"Recipient" means anyone who receives the Program under this
+Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby
+grants Recipient a non-exclusive, worldwide, royalty-free copyright
+license to reproduce, prepare derivative works of, publicly display,
+publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and
+object code form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby
+grants Recipient a non-exclusive, worldwide, royalty-free patent
+license under Licensed Patents to make, use, sell, offer to sell,
+import and otherwise transfer the Contribution of such Contributor,
+if any, in source code and object code form. This patent license
+shall apply to the combination of the Contribution and the Program
+if, at the time the Contribution is added by the Contributor, such
+addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any
+other combinations which include the Contribution. No hardware per
+se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the
+licenses to its Contributions set forth herein, no assurances are
+provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other
+entity. Each Contributor disclaims any liability to Recipient for
+claims brought by any other entity based on infringement of
+intellectual property rights or otherwise. As a condition to
+exercising the rights and licenses granted hereunder, each Recipient
+hereby assumes sole responsibility to secure any other intellectual
+property rights needed, if any. For example, if a third party patent
+license is required to allow Recipient to distribute the Program, it
+is Recipient's responsibility to acquire that license before
+distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has
+sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:
+
+ a) it complies with the terms and conditions of this Agreement;
+ and
+
+ b) its license agreement:
+
+ i) effectively disclaims on behalf of all Contributors all
+ warranties and conditions, express and implied, including
+ warranties or conditions of title and non-infringement, and
+ implied warranties or conditions of merchantability and
+ fitness for a particular purpose;
+
+ ii) effectively excludes on behalf of all Contributors all
+ liability for damages, including direct, indirect, special,
+ incidental and consequential damages, such as lost profits;
+
+ iii) states that any provisions which differ from this
+ Agreement are offered by that Contributor alone and not by
+ any other party; and
+
+ iv) states that source code for the Program is available
+ from such Contributor, and informs licensees how to obtain
+ it in a reasonable manner on or through a medium customarily
+ used for software exchange.
+
+When the Program is made available in source code form:
+
+ a) it must be made available under this Agreement; and
+
+ b) a copy of this Agreement must be included with each copy of
+ the Program.
+
+Contributors may not remove or alter any copyright notices contained
+within the Program.
+
+Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and
+the like. While this license is intended to facilitate the
+commercial use of the Program, the Contributor who includes the
+Program in a commercial product offering should do so in a manner
+which does not create potential liability for other
+Contributors. Therefore, if a Contributor includes the Program in a
+commercial product offering, such Contributor ("Commercial
+Contributor") hereby agrees to defend and indemnify every other
+Contributor ("Indemnified Contributor") against any losses, damages
+and costs (collectively "Losses") arising from claims, lawsuits and
+other legal actions brought by a third party against the Indemnified
+Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the
+Program in a commercial product offering. The obligations in this
+section do not apply to any claims or Losses relating to any actual
+or alleged intellectual property infringement. In order to qualify,
+an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial
+Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement
+negotiations. The Indemnified Contributor may participate in any
+such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's
+responsibility alone. Under this section, the Commercial Contributor
+would have to defend claims against the other Contributors related
+to those performance claims and warranties, and if a court requires
+any other Contributor to pay any damages as a result, the Commercial
+Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient
+is solely responsible for determining the appropriateness of using
+and distributing the Program and assumes all risks associated with
+its exercise of rights under this Agreement , including but not
+limited to the risks and costs of program errors, compliance with
+applicable laws, damage to or loss of data, programs or equipment,
+and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability
+of the remainder of the terms of this Agreement, and without further
+action by the parties hereto, such provision shall be reformed to
+the minimum extent necessary to make such provision valid and
+enforceable.
+
+If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+the Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then
+such Recipient's rights granted under Section 2(b) shall terminate
+as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of
+time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use
+and distribution of the Program as soon as reasonably
+practicable. However, Recipient's obligations under this Agreement
+and any licenses granted by Recipient relating to the Program shall
+continue and survive.
+
+Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions
+(including revisions) of this Agreement from time to time. No one
+other than the Agreement Steward has the right to modify this
+Agreement. The Eclipse Foundation is the initial Agreement
+Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each
+new version of the Agreement will be given a distinguishing version
+number. The Program (including Contributions) may always be
+distributed subject to the version of the Agreement under which it
+was received. In addition, after a new version of the Agreement is
+published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives
+no rights or licenses to the intellectual property of any
+Contributor under this Agreement, whether expressly, by implication,
+estoppel or otherwise. All rights in the Program not expressly
+granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No
+party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each
+party waives its rights to a jury trial in any resulting litigation.
diff --git a/LICENSE_ipopt.txt b/LICENSE_ipopt.txt
new file mode 100644
index 0000000..16cc69a
--- /dev/null
+++ b/LICENSE_ipopt.txt
@@ -0,0 +1,87 @@
+Eclipse Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
+
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.
diff --git a/LICENSE_symphony.txt b/LICENSE_symphony.txt
new file mode 100644
index 0000000..09093e3
--- /dev/null
+++ b/LICENSE_symphony.txt
@@ -0,0 +1,214 @@
+Eclipse Public License -v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
+LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are
+distributed by that particular Contributor. A Contribution 'originates' from a
+Contributor if it was added to the Program by such Contributor itself or
+anyone acting on such Contributor's behalf. Contributions do not include
+additions to the Program which: (i) are separate modules of software
+distributed in conjunction with the Program under their own license agreement,
+and (ii) are not derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are
+necessarily infringed by the use or sale of its Contribution alone or when
+combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this
+Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement,
+including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide, royalty-free copyright license to
+reproduce, prepare derivative works of, publicly display, publicly perform,
+distribute and sublicense the Contribution of such Contributor, if any, and
+such derivative works, in source code and object code form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide, royalty-free patent license under
+Licensed Patents to make, use, sell, offer to sell, import and otherwise
+transfer the Contribution of such Contributor, if any, in source code and
+object code form. This patent license shall apply to the combination of the
+Contribution and the Program if, at the time the Contribution is added by the
+Contributor, such addition of the Contribution causes such combination to be
+covered by the Licensed Patents. The patent license shall not apply to any
+other combinations which include the Contribution. No hardware per se is
+licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to
+its Contributions set forth herein, no assurances are provided by any
+Contributor that the Program does not infringe the patent or other
+intellectual property rights of any other entity. Each Contributor disclaims
+any liability to Recipient for claims brought by any other entity based on
+infringement of intellectual property rights or otherwise. As a condition to
+exercising the rights and licenses granted hereunder, each Recipient hereby
+assumes sole responsibility to secure any other intellectual property rights
+needed, if any. For example, if a third party patent license is required to
+allow Recipient to distribute the Program, it is Recipient's responsibility to
+acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient
+copyright rights in its Contribution, if any, to grant the copyright license
+set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under
+its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for
+damages, including direct, indirect, special, incidental and consequential
+damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered
+by that Contributor alone and not by any other party; and
+
+iv) states that source code for the Program is available from such
+Contributor, and informs licensees how to obtain it in a reasonable manner on
+or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within
+the Program.
+
+Each Contributor must identify itself as the originator of its Contribution,
+if any, in a manner that reasonably allows subsequent Recipients to identify
+the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with
+respect to end users, business partners and the like. While this license is
+intended to facilitate the commercial use of the Program, the Contributor who
+includes the Program in a commercial product offering should do so in a manner
+which does not create potential liability for other Contributors. Therefore,
+if a Contributor includes the Program in a commercial product offering, such
+Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
+every other Contributor ("Indemnified Contributor") against any losses,
+damages and costs (collectively "Losses") arising from claims, lawsuits and
+other legal actions brought by a third party against the Indemnified
+Contributor to the extent caused by the acts or omissions of such Commercial
+Contributor in connection with its distribution of the Program in a commercial
+product offering. The obligations in this section do not apply to any claims
+or Losses relating to any actual or alleged intellectual property
+infringement. In order to qualify, an Indemnified Contributor must: a)
+promptly notify the Commercial Contributor in writing of such claim, and b)
+allow the Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product
+offering, Product X. That Contributor is then a Commercial Contributor. If
+that Commercial Contributor then makes performance claims, or offers
+warranties related to Product X, those performance claims and warranties are
+such Commercial Contributor's responsibility alone. Under this section, the
+Commercial Contributor would have to defend claims against the other
+Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each
+Recipient is solely responsible for determining the appropriateness of using
+and distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to the
+risks and costs of program errors, compliance with applicable laws, damage to
+or loss of data, programs or equipment, and unavailability or interruption of
+operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION
+LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY
+OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of the
+remainder of the terms of this Agreement, and without further action by the
+parties hereto, such provision shall be reformed to the minimum extent
+necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+(excluding combinations of the Program with other software or hardware)
+infringes such Recipient's patent(s), then such Recipient's rights granted
+under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to
+comply with any of the material terms or conditions of this Agreement and does
+not cure such failure in a reasonable period of time after becoming aware of
+such noncompliance. If all Recipient's rights under this Agreement terminate,
+Recipient agrees to cease use and distribution of the Program as soon as
+reasonably practicable. However, Recipient's obligations under this Agreement
+and any licenses granted by Recipient relating to the Program shall continue
+and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in
+order to avoid inconsistency the Agreement is copyrighted and may only be
+modified in the following manner. The Agreement Steward reserves the right to
+publish new versions (including revisions) of this Agreement from time to
+time. No one other than the Agreement Steward has the right to modify this
+Agreement. The Eclipse Foundation is the initial Agreement Steward. The
+Eclipse Foundation may assign the responsibility to serve as the Agreement
+Steward to a suitable separate entity. Each new version of the Agreement will
+be given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version of the
+Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly
+stated in Sections 2(a) and 2(b) above, Recipient receives no rights or
+licenses to the intellectual property of any Contributor under this Agreement,
+whether expressly, by implication, estoppel or otherwise. All rights in the
+Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the
+intellectual property laws of the United States of America. No party to this
+Agreement will bring a legal action under this Agreement more than one year
+after the cause of action arose. Each party waives its rights to a jury trial
+in any resulting litigation.
+
diff --git a/help/en_US/lsqlin.xml b/help/en_US/lsqlin.xml
index c6ec286..0904933 100644
--- a/help/en_US/lsqlin.xml
+++ b/help/en_US/lsqlin.xml
@@ -56,7 +56,7 @@
<varlistentry><term>x0 :</term>
<listitem><para> a vector of double, contains initial guess of variables.</para></listitem></varlistentry>
<varlistentry><term>param :</term>
- <listitem><para> a list containing the the parameters to be set.</para></listitem></varlistentry>
+ <listitem><para> a list containing the parameters to be set.</para></listitem></varlistentry>
<varlistentry><term>xopt :</term>
<listitem><para> a vector of double, the computed solution of the optimization problem.</para></listitem></varlistentry>
<varlistentry><term>resnorm :</term>
@@ -64,11 +64,11 @@
<varlistentry><term>residual :</term>
<listitem><para> a vector of double, solution residuals returned as the vector d-C*x.</para></listitem></varlistentry>
<varlistentry><term>exitflag :</term>
- <listitem><para> A flag showing returned exit flag from Ipopt. It could be 0, 1 or 2 etc. i.e. Optimal, Maximum Number of Iterations Exceeded, CPU time exceeded. Other flags one can see in the lsqlin macro.</para></listitem></varlistentry>
+ <listitem><para> The exit status. See below for details.</para></listitem></varlistentry>
<varlistentry><term>output :</term>
- <listitem><para> Structure containing information about the optimization. This version only contains number of iterations.</para></listitem></varlistentry>
+ <listitem><para> The structure consist of statistics about the optimization. See below for details.</para></listitem></varlistentry>
<varlistentry><term>lambda :</term>
- <listitem><para> Structure containing the Lagrange multipliers at the solution x (separated by constraint type).It contains lower, upper bound multiplier and linear equality, inequality constraint multiplier.</para></listitem></varlistentry>
+ <listitem><para> The structure consist of the Lagrange multipliers at the solution of problem. See below for details.</para></listitem></varlistentry>
</variablelist>
</refsection>
@@ -92,6 +92,39 @@ Search the minimum of a constrained linear least square problem specified by :
The routine calls Ipopt for solving the linear least square problem, Ipopt is a library written in C++.
</para>
<para>
+The exitflag allows to know the status of the optimization which is given back by Ipopt.
+<itemizedlist>
+<listitem>exitflag=0 : Optimal Solution Found </listitem>
+<listitem>exitflag=1 : Maximum Number of Iterations Exceeded. Output may not be optimal.</listitem>
+<listitem>exitflag=2 : Maximum CPU Time exceeded. Output may not be optimal.</listitem>
+<listitem>exitflag=3 : Stop at Tiny Step.</listitem>
+<listitem>exitflag=4 : Solved To Acceptable Level.</listitem>
+<listitem>exitflag=5 : Converged to a point of local infeasibility.</listitem>
+</itemizedlist>
+ </para>
+ <para>
+For more details on exitflag see the ipopt documentation, go to http://www.coin-or.org/Ipopt/documentation/
+ </para>
+ <para>
+The output data structure contains detailed informations about the optimization process.
+It has type "struct" and contains the following fields.
+<itemizedlist>
+<listitem>output.iterations: The number of iterations performed during the search</listitem>
+<listitem>output.constrviolation: The max-norm of the constraint violation.</listitem>
+</itemizedlist>
+ </para>
+ <para>
+The lambda data structure contains the Lagrange multipliers at the end
+of optimization. In the current version the values are returned only when the the solution is optimal.
+It has type "struct" and contains the following fields.
+<itemizedlist>
+<listitem>lambda.lower: The Lagrange multipliers for the lower bound constraints.</listitem>
+<listitem>lambda.upper: The Lagrange multipliers for the upper bound constraints.</listitem>
+<listitem>lambda.eqlin: The Lagrange multipliers for the linear equality constraints.</listitem>
+<listitem>lambda.ineqlin: The Lagrange multipliers for the linear inequality constraints.</listitem>
+</itemizedlist>
+ </para>
+ <para>
</para>
</refsection>
diff --git a/help/en_US/lsqnonneg.xml b/help/en_US/lsqnonneg.xml
index 5d78bbd..201e878 100644
--- a/help/en_US/lsqnonneg.xml
+++ b/help/en_US/lsqnonneg.xml
@@ -45,11 +45,11 @@
<varlistentry><term>residual :</term>
<listitem><para> a vector of double, solution residuals returned as the vector d-C*x.</para></listitem></varlistentry>
<varlistentry><term>exitflag :</term>
- <listitem><para> A flag showing returned exit flag from Ipopt. It could be 0, 1 or 2 etc. i.e. Optimal, Maximum Number of Iterations Exceeded, CPU time exceeded. Other flags one can see in the lsqlin macro.</para></listitem></varlistentry>
+ <listitem><para> The exit status. See below for details.</para></listitem></varlistentry>
<varlistentry><term>output :</term>
- <listitem><para> Structure containing information about the optimization. This version only contains number of iterations.</para></listitem></varlistentry>
+ <listitem><para> The structure consist of statistics about the optimization. See below for details.</para></listitem></varlistentry>
<varlistentry><term>lambda :</term>
- <listitem><para> Structure containing the Lagrange multipliers at the solution xopt. It contains lower, upper bound multiplier and linear equality, inequality constraint multiplier.</para></listitem></varlistentry>
+ <listitem><para> The structure consist of the Lagrange multipliers at the solution of problem. See below for details.</para></listitem></varlistentry>
</variablelist>
</refsection>
@@ -71,6 +71,37 @@ Solves nonnegative least-squares curve fitting problems specified by :
The routine calls Ipopt for solving the nonnegative least-squares curve fitting problems, Ipopt is a library written in C++.
</para>
<para>
+The exitflag allows to know the status of the optimization which is given back by Ipopt.
+<itemizedlist>
+<listitem>exitflag=0 : Optimal Solution Found </listitem>
+<listitem>exitflag=1 : Maximum Number of Iterations Exceeded. Output may not be optimal.</listitem>
+<listitem>exitflag=2 : Maximum CPU Time exceeded. Output may not be optimal.</listitem>
+<listitem>exitflag=3 : Stop at Tiny Step.</listitem>
+<listitem>exitflag=4 : Solved To Acceptable Level.</listitem>
+<listitem>exitflag=5 : Converged to a point of local infeasibility.</listitem>
+</itemizedlist>
+ </para>
+ <para>
+For more details on exitflag see the ipopt documentation, go to http://www.coin-or.org/Ipopt/documentation/
+ </para>
+ <para>
+The output data structure contains detailed informations about the optimization process.
+It has type "struct" and contains the following fields.
+<itemizedlist>
+<listitem>output.iterations: The number of iterations performed during the search</listitem>
+<listitem>output.constrviolation: The max-norm of the constraint violation.</listitem>
+</itemizedlist>
+ </para>
+ <para>
+The lambda data structure contains the Lagrange multipliers at the end
+of optimization. In the current version the values are returned only when the the solution is optimal.
+It has type "struct" and contains the following fields.
+<itemizedlist>
+<listitem>lambda.lower: The Lagrange multipliers for the lower bound constraints.</listitem>
+<listitem>lambda.upper: The Lagrange multipliers for the upper bound constraints.</listitem>
+</itemizedlist>
+ </para>
+ <para>
</para>
</refsection>
diff --git a/help/en_US/qpipopt.xml b/help/en_US/qpipopt.xml
index 3ba2107..170b457 100644
--- a/help/en_US/qpipopt.xml
+++ b/help/en_US/qpipopt.xml
@@ -48,7 +48,7 @@
<varlistentry><term>ub :</term>
<listitem><para> a vector of double, contains upper bounds of the variables.</para></listitem></varlistentry>
<varlistentry><term>A :</term>
- <listitem><para> a matrix of double, contains matrix representing the constraint matrix</para></listitem></varlistentry>
+ <listitem><para> a matrix of double, contains the constraint matrix</para></listitem></varlistentry>
<varlistentry><term>conLB :</term>
<listitem><para> a vector of double, contains lower bounds of the constraints.</para></listitem></varlistentry>
<varlistentry><term>conUB :</term>
@@ -56,17 +56,17 @@
<varlistentry><term>x0 :</term>
<listitem><para> a vector of double, contains initial guess of variables.</para></listitem></varlistentry>
<varlistentry><term>param :</term>
- <listitem><para> a list containing the the parameters to be set.</para></listitem></varlistentry>
+ <listitem><para> a list containing the parameters to be set.</para></listitem></varlistentry>
<varlistentry><term>xopt :</term>
<listitem><para> a vector of double, the computed solution of the optimization problem.</para></listitem></varlistentry>
<varlistentry><term>fopt :</term>
- <listitem><para> a double, the function value at x.</para></listitem></varlistentry>
+ <listitem><para> a double, the value of the function at x.</para></listitem></varlistentry>
<varlistentry><term>exitflag :</term>
- <listitem><para> A flag showing returned exit flag from Ipopt. It could be 0, 1 or 2 etc. i.e. Optimal, Maximum Number of Iterations Exceeded, CPU time exceeded. Other flags one can see in the lsqlin macro.</para></listitem></varlistentry>
+ <listitem><para> The exit status. See below for details.</para></listitem></varlistentry>
<varlistentry><term>output :</term>
- <listitem><para> Structure containing information about the optimization. This version only contains number of iterations</para></listitem></varlistentry>
+ <listitem><para> The structure consist of statistics about the optimization. See below for details.</para></listitem></varlistentry>
<varlistentry><term>lambda :</term>
- <listitem><para> Structure containing the Lagrange multipliers at the solution x (separated by constraint type).It contains lower, upper bound multiplier and linear equality, inequality constraint multiplier.</para></listitem></varlistentry>
+ <listitem><para> The structure consist of the Lagrange multipliers at the solution of problem. See below for details.</para></listitem></varlistentry>
</variablelist>
</refsection>
@@ -89,6 +89,39 @@ Search the minimum of a constrained linear quadratic optimization problem specif
The routine calls Ipopt for solving the quadratic problem, Ipopt is a library written in C++.
</para>
<para>
+The exitflag allows to know the status of the optimization which is given back by Ipopt.
+<itemizedlist>
+<listitem>exitflag=0 : Optimal Solution Found </listitem>
+<listitem>exitflag=1 : Maximum Number of Iterations Exceeded. Output may not be optimal.</listitem>
+<listitem>exitflag=2 : Maximum CPU Time exceeded. Output may not be optimal.</listitem>
+<listitem>exitflag=3 : Stop at Tiny Step.</listitem>
+<listitem>exitflag=4 : Solved To Acceptable Level.</listitem>
+<listitem>exitflag=5 : Converged to a point of local infeasibility.</listitem>
+</itemizedlist>
+ </para>
+ <para>
+For more details on exitflag see the ipopt documentation, go to http://www.coin-or.org/Ipopt/documentation/
+ </para>
+ <para>
+The output data structure contains detailed informations about the optimization process.
+It has type "struct" and contains the following fields.
+<itemizedlist>
+<listitem>output.iterations: The number of iterations performed during the search</listitem>
+<listitem>output.constrviolation: The max-norm of the constraint violation.</listitem>
+</itemizedlist>
+ </para>
+ <para>
+The lambda data structure contains the Lagrange multipliers at the end
+of optimization. In the current version the values are returned only when the the solution is optimal.
+It has type "struct" and contains the following fields.
+<itemizedlist>
+<listitem>lambda.lower: The Lagrange multipliers for the lower bound constraints.</listitem>
+<listitem>lambda.upper: The Lagrange multipliers for the upper bound constraints.</listitem>
+<listitem>lambda.eqlin: The Lagrange multipliers for the linear equality constraints.</listitem>
+<listitem>lambda.ineqlin: The Lagrange multipliers for the linear inequality constraints.</listitem>
+</itemizedlist>
+ </para>
+ <para>
</para>
</refsection>
diff --git a/help/en_US/qpipoptmat.xml b/help/en_US/qpipoptmat.xml
index 1334603..82249a7 100644
--- a/help/en_US/qpipoptmat.xml
+++ b/help/en_US/qpipoptmat.xml
@@ -57,19 +57,19 @@
<varlistentry><term>x0 :</term>
<listitem><para> a vector of double, contains initial guess of variables.</para></listitem></varlistentry>
<varlistentry><term>param :</term>
- <listitem><para> a list containing the the parameters to be set.</para></listitem></varlistentry>
+ <listitem><para> a list containing the parameters to be set.</para></listitem></varlistentry>
<varlistentry><term>xopt :</term>
<listitem><para> a vector of double, the computed solution of the optimization problem.</para></listitem></varlistentry>
<varlistentry><term>fopt :</term>
- <listitem><para> a double, the function value at x.</para></listitem></varlistentry>
+ <listitem><para> a double, the value of the function at x.</para></listitem></varlistentry>
<varlistentry><term>residual :</term>
<listitem><para> a vector of double, solution residuals returned as the vector d-C*x.</para></listitem></varlistentry>
<varlistentry><term>exitflag :</term>
- <listitem><para> A flag showing returned exit flag from Ipopt. It could be 0, 1 or 2 etc. i.e. Optimal, Maximum Number of Iterations Exceeded, CPU time exceeded. Other flags one can see in the lsqlin macro.</para></listitem></varlistentry>
+ <listitem><para> The exit status. See below for details.</para></listitem></varlistentry>
<varlistentry><term>output :</term>
- <listitem><para> Structure containing information about the optimization. This version only contains number of iterations.</para></listitem></varlistentry>
+ <listitem><para> The structure consist of statistics about the optimization. See below for details.</para></listitem></varlistentry>
<varlistentry><term>lambda :</term>
- <listitem><para> Structure containing the Lagrange multipliers at the solution x (separated by constraint type).It contains lower, upper bound multiplier and linear equality, inequality constraint multiplier.</para></listitem></varlistentry>
+ <listitem><para> The structure consist of the Lagrange multipliers at the solution of problem. See below for details.</para></listitem></varlistentry>
</variablelist>
</refsection>
@@ -93,6 +93,39 @@ Search the minimum of a constrained linear quadratic optimization problem specif
The routine calls Ipopt for solving the quadratic problem, Ipopt is a library written in C++.
</para>
<para>
+The exitflag allows to know the status of the optimization which is given back by Ipopt.
+<itemizedlist>
+<listitem>exitflag=0 : Optimal Solution Found </listitem>
+<listitem>exitflag=1 : Maximum Number of Iterations Exceeded. Output may not be optimal.</listitem>
+<listitem>exitflag=2 : Maximum CPU Time exceeded. Output may not be optimal.</listitem>
+<listitem>exitflag=3 : Stop at Tiny Step.</listitem>
+<listitem>exitflag=4 : Solved To Acceptable Level.</listitem>
+<listitem>exitflag=5 : Converged to a point of local infeasibility.</listitem>
+</itemizedlist>
+ </para>
+ <para>
+For more details on exitflag see the ipopt documentation, go to http://www.coin-or.org/Ipopt/documentation/
+ </para>
+ <para>
+The output data structure contains detailed informations about the optimization process.
+It has type "struct" and contains the following fields.
+<itemizedlist>
+<listitem>output.iterations: The number of iterations performed during the search</listitem>
+<listitem>output.constrviolation: The max-norm of the constraint violation.</listitem>
+</itemizedlist>
+ </para>
+ <para>
+The lambda data structure contains the Lagrange multipliers at the end
+of optimization. In the current version the values are returned only when the the solution is optimal.
+It has type "struct" and contains the following fields.
+<itemizedlist>
+<listitem>lambda.lower: The Lagrange multipliers for the lower bound constraints.</listitem>
+<listitem>lambda.upper: The Lagrange multipliers for the upper bound constraints.</listitem>
+<listitem>lambda.eqlin: The Lagrange multipliers for the linear equality constraints.</listitem>
+<listitem>lambda.ineqlin: The Lagrange multipliers for the linear inequality constraints.</listitem>
+</itemizedlist>
+ </para>
+ <para>
</para>
</refsection>
diff --git a/help/en_US/scilab_en_US_help/JavaHelpSearch/DOCS b/help/en_US/scilab_en_US_help/JavaHelpSearch/DOCS
index d3146bf..8323669 100644
--- a/help/en_US/scilab_en_US_help/JavaHelpSearch/DOCS
+++ b/help/en_US/scilab_en_US_help/JavaHelpSearch/DOCS
Binary files differ
diff --git a/help/en_US/scilab_en_US_help/JavaHelpSearch/DOCS.TAB b/help/en_US/scilab_en_US_help/JavaHelpSearch/DOCS.TAB
index f0a1fcb..ba30e61 100644
--- a/help/en_US/scilab_en_US_help/JavaHelpSearch/DOCS.TAB
+++ b/help/en_US/scilab_en_US_help/JavaHelpSearch/DOCS.TAB
Binary files differ
diff --git a/help/en_US/scilab_en_US_help/JavaHelpSearch/OFFSETS b/help/en_US/scilab_en_US_help/JavaHelpSearch/OFFSETS
index 8a63187..6e8476f 100644
--- a/help/en_US/scilab_en_US_help/JavaHelpSearch/OFFSETS
+++ b/help/en_US/scilab_en_US_help/JavaHelpSearch/OFFSETS
Binary files differ
diff --git a/help/en_US/scilab_en_US_help/JavaHelpSearch/POSITIONS b/help/en_US/scilab_en_US_help/JavaHelpSearch/POSITIONS
index 423d132..9cd3f49 100644
--- a/help/en_US/scilab_en_US_help/JavaHelpSearch/POSITIONS
+++ b/help/en_US/scilab_en_US_help/JavaHelpSearch/POSITIONS
Binary files differ
diff --git a/help/en_US/scilab_en_US_help/JavaHelpSearch/SCHEMA b/help/en_US/scilab_en_US_help/JavaHelpSearch/SCHEMA
index 6df2edb..f4e9ef7 100644
--- a/help/en_US/scilab_en_US_help/JavaHelpSearch/SCHEMA
+++ b/help/en_US/scilab_en_US_help/JavaHelpSearch/SCHEMA
@@ -1,2 +1,2 @@
JavaSearch 1.0
-TMAP bs=2048 rt=1 fl=-1 id1=1249 id2=1
+TMAP bs=2048 rt=1 fl=-1 id1=1280 id2=1
diff --git a/help/en_US/scilab_en_US_help/JavaHelpSearch/TMAP b/help/en_US/scilab_en_US_help/JavaHelpSearch/TMAP
index 6104335..12891d8 100644
--- a/help/en_US/scilab_en_US_help/JavaHelpSearch/TMAP
+++ b/help/en_US/scilab_en_US_help/JavaHelpSearch/TMAP
Binary files differ
diff --git a/help/en_US/scilab_en_US_help/lsqlin.html b/help/en_US/scilab_en_US_help/lsqlin.html
index e9253c5..7dbb227 100644
--- a/help/en_US/scilab_en_US_help/lsqlin.html
+++ b/help/en_US/scilab_en_US_help/lsqlin.html
@@ -64,7 +64,7 @@
<dt><span class="term">x0 :</span>
<dd><p class="para">a vector of double, contains initial guess of variables.</p></dd></dt>
<dt><span class="term">param :</span>
- <dd><p class="para">a list containing the the parameters to be set.</p></dd></dt>
+ <dd><p class="para">a list containing the parameters to be set.</p></dd></dt>
<dt><span class="term">xopt :</span>
<dd><p class="para">a vector of double, the computed solution of the optimization problem.</p></dd></dt>
<dt><span class="term">resnorm :</span>
@@ -72,16 +72,35 @@
<dt><span class="term">residual :</span>
<dd><p class="para">a vector of double, solution residuals returned as the vector d-C*x.</p></dd></dt>
<dt><span class="term">exitflag :</span>
- <dd><p class="para">A flag showing returned exit flag from Ipopt. It could be 0, 1 or 2 etc. i.e. Optimal, Maximum Number of Iterations Exceeded, CPU time exceeded. Other flags one can see in the lsqlin macro.</p></dd></dt>
+ <dd><p class="para">The exit status. See below for details.</p></dd></dt>
<dt><span class="term">output :</span>
- <dd><p class="para">Structure containing information about the optimization. This version only contains number of iterations.</p></dd></dt>
+ <dd><p class="para">The structure consist of statistics about the optimization. See below for details.</p></dd></dt>
<dt><span class="term">lambda :</span>
- <dd><p class="para">Structure containing the Lagrange multipliers at the solution x (separated by constraint type).It contains lower, upper bound multiplier and linear equality, inequality constraint multiplier.</p></dd></dt></dl></div>
+ <dd><p class="para">The structure consist of the Lagrange multipliers at the solution of problem. See below for details.</p></dd></dt></dl></div>
<div class="refsection"><h3 class="title">Description</h3>
<p class="para">Search the minimum of a constrained linear least square problem specified by :</p>
<p class="para"><span><img src='./_LaTeX_lsqlin.xml_1.png' style='position:relative;top:41px;width:230px;height:90px'/></span></p>
<p class="para">The routine calls Ipopt for solving the linear least square problem, Ipopt is a library written in C++.</p>
+ <p class="para">The exitflag allows to know the status of the optimization which is given back by Ipopt.
+<ul class="itemizedlist"><li>exitflag=0 : Optimal Solution Found</li>
+<li>exitflag=1 : Maximum Number of Iterations Exceeded. Output may not be optimal.</li>
+<li>exitflag=2 : Maximum CPU Time exceeded. Output may not be optimal.</li>
+<li>exitflag=3 : Stop at Tiny Step.</li>
+<li>exitflag=4 : Solved To Acceptable Level.</li>
+<li>exitflag=5 : Converged to a point of local infeasibility.</li></ul></p>
+ <p class="para">For more details on exitflag see the ipopt documentation, go to http://www.coin-or.org/Ipopt/documentation/</p>
+ <p class="para">The output data structure contains detailed informations about the optimization process.
+It has type &#0034;struct&#0034; and contains the following fields.
+<ul class="itemizedlist"><li>output.iterations: The number of iterations performed during the search</li>
+<li>output.constrviolation: The max-norm of the constraint violation.</li></ul></p>
+ <p class="para">The lambda data structure contains the Lagrange multipliers at the end
+of optimization. In the current version the values are returned only when the the solution is optimal.
+It has type &#0034;struct&#0034; and contains the following fields.
+<ul class="itemizedlist"><li>lambda.lower: The Lagrange multipliers for the lower bound constraints.</li>
+<li>lambda.upper: The Lagrange multipliers for the upper bound constraints.</li>
+<li>lambda.eqlin: The Lagrange multipliers for the linear equality constraints.</li>
+<li>lambda.ineqlin: The Lagrange multipliers for the linear inequality constraints.</li></ul></p>
<p class="para"></p></div>
<div class="refsection"><h3 class="title">Examples</h3>
diff --git a/help/en_US/scilab_en_US_help/lsqnonneg.html b/help/en_US/scilab_en_US_help/lsqnonneg.html
index 7211c40..a8e6801 100644
--- a/help/en_US/scilab_en_US_help/lsqnonneg.html
+++ b/help/en_US/scilab_en_US_help/lsqnonneg.html
@@ -53,16 +53,33 @@
<dt><span class="term">residual :</span>
<dd><p class="para">a vector of double, solution residuals returned as the vector d-C*x.</p></dd></dt>
<dt><span class="term">exitflag :</span>
- <dd><p class="para">A flag showing returned exit flag from Ipopt. It could be 0, 1 or 2 etc. i.e. Optimal, Maximum Number of Iterations Exceeded, CPU time exceeded. Other flags one can see in the lsqlin macro.</p></dd></dt>
+ <dd><p class="para">The exit status. See below for details.</p></dd></dt>
<dt><span class="term">output :</span>
- <dd><p class="para">Structure containing information about the optimization. This version only contains number of iterations.</p></dd></dt>
+ <dd><p class="para">The structure consist of statistics about the optimization. See below for details.</p></dd></dt>
<dt><span class="term">lambda :</span>
- <dd><p class="para">Structure containing the Lagrange multipliers at the solution xopt. It contains lower, upper bound multiplier and linear equality, inequality constraint multiplier.</p></dd></dt></dl></div>
+ <dd><p class="para">The structure consist of the Lagrange multipliers at the solution of problem. See below for details.</p></dd></dt></dl></div>
<div class="refsection"><h3 class="title">Description</h3>
<p class="para">Solves nonnegative least-squares curve fitting problems specified by :</p>
<p class="para"><span><img src='./_LaTeX_lsqnonneg.xml_1.png' style='position:relative;top:19px;width:193px;height:46px'/></span></p>
<p class="para">The routine calls Ipopt for solving the nonnegative least-squares curve fitting problems, Ipopt is a library written in C++.</p>
+ <p class="para">The exitflag allows to know the status of the optimization which is given back by Ipopt.
+<ul class="itemizedlist"><li>exitflag=0 : Optimal Solution Found</li>
+<li>exitflag=1 : Maximum Number of Iterations Exceeded. Output may not be optimal.</li>
+<li>exitflag=2 : Maximum CPU Time exceeded. Output may not be optimal.</li>
+<li>exitflag=3 : Stop at Tiny Step.</li>
+<li>exitflag=4 : Solved To Acceptable Level.</li>
+<li>exitflag=5 : Converged to a point of local infeasibility.</li></ul></p>
+ <p class="para">For more details on exitflag see the ipopt documentation, go to http://www.coin-or.org/Ipopt/documentation/</p>
+ <p class="para">The output data structure contains detailed informations about the optimization process.
+It has type &#0034;struct&#0034; and contains the following fields.
+<ul class="itemizedlist"><li>output.iterations: The number of iterations performed during the search</li>
+<li>output.constrviolation: The max-norm of the constraint violation.</li></ul></p>
+ <p class="para">The lambda data structure contains the Lagrange multipliers at the end
+of optimization. In the current version the values are returned only when the the solution is optimal.
+It has type &#0034;struct&#0034; and contains the following fields.
+<ul class="itemizedlist"><li>lambda.lower: The Lagrange multipliers for the lower bound constraints.</li>
+<li>lambda.upper: The Lagrange multipliers for the upper bound constraints.</li></ul></p>
<p class="para"></p></div>
<div class="refsection"><h3 class="title">Examples</h3>
diff --git a/help/en_US/scilab_en_US_help/qpipopt.html b/help/en_US/scilab_en_US_help/qpipopt.html
index 31f389f..fc08a81 100644
--- a/help/en_US/scilab_en_US_help/qpipopt.html
+++ b/help/en_US/scilab_en_US_help/qpipopt.html
@@ -56,7 +56,7 @@
<dt><span class="term">ub :</span>
<dd><p class="para">a vector of double, contains upper bounds of the variables.</p></dd></dt>
<dt><span class="term">A :</span>
- <dd><p class="para">a matrix of double, contains matrix representing the constraint matrix</p></dd></dt>
+ <dd><p class="para">a matrix of double, contains the constraint matrix</p></dd></dt>
<dt><span class="term">conLB :</span>
<dd><p class="para">a vector of double, contains lower bounds of the constraints.</p></dd></dt>
<dt><span class="term">conUB :</span>
@@ -64,22 +64,41 @@
<dt><span class="term">x0 :</span>
<dd><p class="para">a vector of double, contains initial guess of variables.</p></dd></dt>
<dt><span class="term">param :</span>
- <dd><p class="para">a list containing the the parameters to be set.</p></dd></dt>
+ <dd><p class="para">a list containing the parameters to be set.</p></dd></dt>
<dt><span class="term">xopt :</span>
<dd><p class="para">a vector of double, the computed solution of the optimization problem.</p></dd></dt>
<dt><span class="term">fopt :</span>
- <dd><p class="para">a double, the function value at x.</p></dd></dt>
+ <dd><p class="para">a double, the value of the function at x.</p></dd></dt>
<dt><span class="term">exitflag :</span>
- <dd><p class="para">A flag showing returned exit flag from Ipopt. It could be 0, 1 or 2 etc. i.e. Optimal, Maximum Number of Iterations Exceeded, CPU time exceeded. Other flags one can see in the lsqlin macro.</p></dd></dt>
+ <dd><p class="para">The exit status. See below for details.</p></dd></dt>
<dt><span class="term">output :</span>
- <dd><p class="para">Structure containing information about the optimization. This version only contains number of iterations</p></dd></dt>
+ <dd><p class="para">The structure consist of statistics about the optimization. See below for details.</p></dd></dt>
<dt><span class="term">lambda :</span>
- <dd><p class="para">Structure containing the Lagrange multipliers at the solution x (separated by constraint type).It contains lower, upper bound multiplier and linear equality, inequality constraint multiplier.</p></dd></dt></dl></div>
+ <dd><p class="para">The structure consist of the Lagrange multipliers at the solution of problem. See below for details.</p></dd></dt></dl></div>
<div class="refsection"><h3 class="title">Description</h3>
<p class="para">Search the minimum of a constrained linear quadratic optimization problem specified by :</p>
<p class="para"><span><img src='./_LaTeX_qpipopt.xml_1.png' style='position:relative;top:31px;width:292px;height:70px'/></span></p>
<p class="para">The routine calls Ipopt for solving the quadratic problem, Ipopt is a library written in C++.</p>
+ <p class="para">The exitflag allows to know the status of the optimization which is given back by Ipopt.
+<ul class="itemizedlist"><li>exitflag=0 : Optimal Solution Found</li>
+<li>exitflag=1 : Maximum Number of Iterations Exceeded. Output may not be optimal.</li>
+<li>exitflag=2 : Maximum CPU Time exceeded. Output may not be optimal.</li>
+<li>exitflag=3 : Stop at Tiny Step.</li>
+<li>exitflag=4 : Solved To Acceptable Level.</li>
+<li>exitflag=5 : Converged to a point of local infeasibility.</li></ul></p>
+ <p class="para">For more details on exitflag see the ipopt documentation, go to http://www.coin-or.org/Ipopt/documentation/</p>
+ <p class="para">The output data structure contains detailed informations about the optimization process.
+It has type &#0034;struct&#0034; and contains the following fields.
+<ul class="itemizedlist"><li>output.iterations: The number of iterations performed during the search</li>
+<li>output.constrviolation: The max-norm of the constraint violation.</li></ul></p>
+ <p class="para">The lambda data structure contains the Lagrange multipliers at the end
+of optimization. In the current version the values are returned only when the the solution is optimal.
+It has type &#0034;struct&#0034; and contains the following fields.
+<ul class="itemizedlist"><li>lambda.lower: The Lagrange multipliers for the lower bound constraints.</li>
+<li>lambda.upper: The Lagrange multipliers for the upper bound constraints.</li>
+<li>lambda.eqlin: The Lagrange multipliers for the linear equality constraints.</li>
+<li>lambda.ineqlin: The Lagrange multipliers for the linear inequality constraints.</li></ul></p>
<p class="para"></p></div>
<div class="refsection"><h3 class="title">Examples</h3>
diff --git a/help/en_US/scilab_en_US_help/qpipoptmat.html b/help/en_US/scilab_en_US_help/qpipoptmat.html
index 6c195ea..4a89648 100644
--- a/help/en_US/scilab_en_US_help/qpipoptmat.html
+++ b/help/en_US/scilab_en_US_help/qpipoptmat.html
@@ -65,24 +65,43 @@
<dt><span class="term">x0 :</span>
<dd><p class="para">a vector of double, contains initial guess of variables.</p></dd></dt>
<dt><span class="term">param :</span>
- <dd><p class="para">a list containing the the parameters to be set.</p></dd></dt>
+ <dd><p class="para">a list containing the parameters to be set.</p></dd></dt>
<dt><span class="term">xopt :</span>
<dd><p class="para">a vector of double, the computed solution of the optimization problem.</p></dd></dt>
<dt><span class="term">fopt :</span>
- <dd><p class="para">a double, the function value at x.</p></dd></dt>
+ <dd><p class="para">a double, the value of the function at x.</p></dd></dt>
<dt><span class="term">residual :</span>
<dd><p class="para">a vector of double, solution residuals returned as the vector d-C*x.</p></dd></dt>
<dt><span class="term">exitflag :</span>
- <dd><p class="para">A flag showing returned exit flag from Ipopt. It could be 0, 1 or 2 etc. i.e. Optimal, Maximum Number of Iterations Exceeded, CPU time exceeded. Other flags one can see in the lsqlin macro.</p></dd></dt>
+ <dd><p class="para">The exit status. See below for details.</p></dd></dt>
<dt><span class="term">output :</span>
- <dd><p class="para">Structure containing information about the optimization. This version only contains number of iterations.</p></dd></dt>
+ <dd><p class="para">The structure consist of statistics about the optimization. See below for details.</p></dd></dt>
<dt><span class="term">lambda :</span>
- <dd><p class="para">Structure containing the Lagrange multipliers at the solution x (separated by constraint type).It contains lower, upper bound multiplier and linear equality, inequality constraint multiplier.</p></dd></dt></dl></div>
+ <dd><p class="para">The structure consist of the Lagrange multipliers at the solution of problem. See below for details.</p></dd></dt></dl></div>
<div class="refsection"><h3 class="title">Description</h3>
<p class="para">Search the minimum of a constrained linear quadratic optimization problem specified by :</p>
<p class="para"><span><img src='./_LaTeX_qpipoptmat.xml_1.png' style='position:relative;top:41px;width:277px;height:90px'/></span></p>
<p class="para">The routine calls Ipopt for solving the quadratic problem, Ipopt is a library written in C++.</p>
+ <p class="para">The exitflag allows to know the status of the optimization which is given back by Ipopt.
+<ul class="itemizedlist"><li>exitflag=0 : Optimal Solution Found</li>
+<li>exitflag=1 : Maximum Number of Iterations Exceeded. Output may not be optimal.</li>
+<li>exitflag=2 : Maximum CPU Time exceeded. Output may not be optimal.</li>
+<li>exitflag=3 : Stop at Tiny Step.</li>
+<li>exitflag=4 : Solved To Acceptable Level.</li>
+<li>exitflag=5 : Converged to a point of local infeasibility.</li></ul></p>
+ <p class="para">For more details on exitflag see the ipopt documentation, go to http://www.coin-or.org/Ipopt/documentation/</p>
+ <p class="para">The output data structure contains detailed informations about the optimization process.
+It has type &#0034;struct&#0034; and contains the following fields.
+<ul class="itemizedlist"><li>output.iterations: The number of iterations performed during the search</li>
+<li>output.constrviolation: The max-norm of the constraint violation.</li></ul></p>
+ <p class="para">The lambda data structure contains the Lagrange multipliers at the end
+of optimization. In the current version the values are returned only when the the solution is optimal.
+It has type &#0034;struct&#0034; and contains the following fields.
+<ul class="itemizedlist"><li>lambda.lower: The Lagrange multipliers for the lower bound constraints.</li>
+<li>lambda.upper: The Lagrange multipliers for the upper bound constraints.</li>
+<li>lambda.eqlin: The Lagrange multipliers for the linear equality constraints.</li>
+<li>lambda.ineqlin: The Lagrange multipliers for the linear inequality constraints.</li></ul></p>
<p class="para"></p></div>
<div class="refsection"><h3 class="title">Examples</h3>
diff --git a/help/en_US/scilab_en_US_help/symphony.html b/help/en_US/scilab_en_US_help/symphony.html
index e374a30..d5b21cd 100644
--- a/help/en_US/scilab_en_US_help/symphony.html
+++ b/help/en_US/scilab_en_US_help/symphony.html
@@ -64,20 +64,29 @@
<dt><span class="term">objSense :</span>
<dd><p class="para">The sense (maximization/minimization) of the objective. Use 1(sym_minimize ) or -1 (sym_maximize) here.</p></dd></dt>
<dt><span class="term">options :</span>
- <dd><p class="para">a list containing the the parameters to be set.</p></dd></dt>
+ <dd><p class="para">a list containing the parameters to be set.</p></dd></dt>
<dt><span class="term">xopt :</span>
<dd><p class="para">a vector of double, the computed solution of the optimization problem.</p></dd></dt>
<dt><span class="term">fopt :</span>
- <dd><p class="para">a double, the function value at x.</p></dd></dt>
+ <dd><p class="para">a double, the value of the function at x.</p></dd></dt>
<dt><span class="term">status :</span>
- <dd><p class="para">status flag returned from symphony. 227 is optimal, 228 is Time limit exceeded, 230 is iteration limit exceeded.</p></dd></dt>
+ <dd><p class="para">status flag returned from symphony.See below for details.</p></dd></dt>
<dt><span class="term">output :</span>
- <dd><p class="para">The output data structure contains detailed information about the optimization process. This version only contains number of iterations</p></dd></dt></dl></div>
+ <dd><p class="para">The output data structure contains detailed information about the optimization process. See below for details.</p></dd></dt></dl></div>
<div class="refsection"><h3 class="title">Description</h3>
<p class="para">Search the minimum or maximum of a constrained mixed integer linear programming optimization problem specified by :</p>
<p class="para"><span><img src='./_LaTeX_symphony.xml_1.png' style='position:relative;top:41px;width:292px;height:90px'/></span></p>
<p class="para">The routine calls SYMPHONY written in C by gateway files for the actual computation.</p>
+ <p class="para">The status allows to know the status of the optimization which is given back by Ipopt.
+<ul class="itemizedlist"><li>status=227 : Optimal Solution Found</li>
+<li>status=228 : Maximum CPU Time exceeded.</li>
+<li>status=229 : Maximum Number of Node Limit Exceeded.</li>
+<li>status=230 : Maximum Number of Iterations Limit Exceeded.</li></ul></p>
+ <p class="para">For more details on status see the symphony documentation, go to http://www.coin-or.org/SYMPHONY/man-5.6/</p>
+ <p class="para">The output data structure contains detailed informations about the optimization process.
+It has type &#0034;struct&#0034; and contains the following fields.
+<ul class="itemizedlist"><li>output.iterations: The number of iterations performed during the search</li></ul></p>
<p class="para"></p></div>
<div class="refsection"><h3 class="title">Examples</h3>
diff --git a/help/en_US/scilab_en_US_help/symphonymat.html b/help/en_US/scilab_en_US_help/symphonymat.html
index 203f2d4..db8ffee 100644
--- a/help/en_US/scilab_en_US_help/symphonymat.html
+++ b/help/en_US/scilab_en_US_help/symphonymat.html
@@ -61,20 +61,29 @@
<dt><span class="term">ub :</span>
<dd><p class="para">Upper bounds, specified as a vector or array of double. ub represents the upper bounds elementwise in lb ≤ x ≤ ub.</p></dd></dt>
<dt><span class="term">options :</span>
- <dd><p class="para">a list containing the the parameters to be set.</p></dd></dt>
+ <dd><p class="para">a list containing the parameters to be set.</p></dd></dt>
<dt><span class="term">xopt :</span>
<dd><p class="para">a vector of double, the computed solution of the optimization problem.</p></dd></dt>
<dt><span class="term">fopt :</span>
- <dd><p class="para">a double, the function value at x</p></dd></dt>
+ <dd><p class="para">a double, the value of the function at x.</p></dd></dt>
<dt><span class="term">status :</span>
- <dd><p class="para">status flag returned from symphony. 227 is optimal, 228 is Time limit exceeded, 230 is iteration limit exceeded.</p></dd></dt>
+ <dd><p class="para">status flag returned from symphony. See below for details.</p></dd></dt>
<dt><span class="term">output :</span>
- <dd><p class="para">The output data structure contains detailed information about the optimization process. This version only contains number of iterations.</p></dd></dt></dl></div>
+ <dd><p class="para">The output data structure contains detailed information about the optimization process. See below for details.</p></dd></dt></dl></div>
<div class="refsection"><h3 class="title">Description</h3>
<p class="para">Search the minimum or maximum of a constrained mixed integer linear programming optimization problem specified by :</p>
<p class="para"><span><img src='./_LaTeX_symphonymat.xml_1.png' style='position:relative;top:51px;width:212px;height:110px'/></span></p>
<p class="para">The routine calls SYMPHONY written in C by gateway files for the actual computation.</p>
+ <p class="para">The status allows to know the status of the optimization which is given back by Ipopt.
+<ul class="itemizedlist"><li>status=227 : Optimal Solution Found</li>
+<li>status=228 : Maximum CPU Time exceeded.</li>
+<li>status=229 : Maximum Number of Node Limit Exceeded.</li>
+<li>status=230 : Maximum Number of Iterations Limit Exceeded.</li></ul></p>
+ <p class="para">For more details on status see the symphony documentation, go to http://www.coin-or.org/SYMPHONY/man-5.6/</p>
+ <p class="para">The output data structure contains detailed informations about the optimization process.
+It has type &#0034;struct&#0034; and contains the following fields.
+<ul class="itemizedlist"><li>output.iterations: The number of iterations performed during the search</li></ul></p>
<p class="para"></p></div>
<div class="refsection"><h3 class="title">Examples</h3>
diff --git a/help/en_US/symphony.xml b/help/en_US/symphony.xml
index da156ce..68f1742 100644
--- a/help/en_US/symphony.xml
+++ b/help/en_US/symphony.xml
@@ -56,15 +56,15 @@
<varlistentry><term>objSense :</term>
<listitem><para> The sense (maximization/minimization) of the objective. Use 1(sym_minimize ) or -1 (sym_maximize) here.</para></listitem></varlistentry>
<varlistentry><term>options :</term>
- <listitem><para> a list containing the the parameters to be set.</para></listitem></varlistentry>
+ <listitem><para> a list containing the parameters to be set.</para></listitem></varlistentry>
<varlistentry><term>xopt :</term>
<listitem><para> a vector of double, the computed solution of the optimization problem.</para></listitem></varlistentry>
<varlistentry><term>fopt :</term>
- <listitem><para> a double, the function value at x.</para></listitem></varlistentry>
+ <listitem><para> a double, the value of the function at x.</para></listitem></varlistentry>
<varlistentry><term>status :</term>
- <listitem><para> status flag returned from symphony. 227 is optimal, 228 is Time limit exceeded, 230 is iteration limit exceeded.</para></listitem></varlistentry>
+ <listitem><para> status flag returned from symphony.See below for details.</para></listitem></varlistentry>
<varlistentry><term>output :</term>
- <listitem><para> The output data structure contains detailed information about the optimization process. This version only contains number of iterations</para></listitem></varlistentry>
+ <listitem><para> The output data structure contains detailed information about the optimization process. See below for details.</para></listitem></varlistentry>
</variablelist>
</refsection>
@@ -88,6 +88,25 @@ Search the minimum or maximum of a constrained mixed integer linear programming
The routine calls SYMPHONY written in C by gateway files for the actual computation.
</para>
<para>
+The status allows to know the status of the optimization which is given back by Ipopt.
+<itemizedlist>
+<listitem>status=227 : Optimal Solution Found </listitem>
+<listitem>status=228 : Maximum CPU Time exceeded.</listitem>
+<listitem>status=229 : Maximum Number of Node Limit Exceeded.</listitem>
+<listitem>status=230 : Maximum Number of Iterations Limit Exceeded.</listitem>
+</itemizedlist>
+ </para>
+ <para>
+For more details on status see the symphony documentation, go to http://www.coin-or.org/SYMPHONY/man-5.6/
+ </para>
+ <para>
+The output data structure contains detailed informations about the optimization process.
+It has type "struct" and contains the following fields.
+<itemizedlist>
+<listitem>output.iterations: The number of iterations performed during the search</listitem>
+</itemizedlist>
+ </para>
+ <para>
</para>
</refsection>
diff --git a/help/en_US/symphonymat.xml b/help/en_US/symphonymat.xml
index 68ec072..33ed973 100644
--- a/help/en_US/symphonymat.xml
+++ b/help/en_US/symphonymat.xml
@@ -53,15 +53,15 @@
<varlistentry><term>ub :</term>
<listitem><para> Upper bounds, specified as a vector or array of double. ub represents the upper bounds elementwise in lb ≤ x ≤ ub.</para></listitem></varlistentry>
<varlistentry><term>options :</term>
- <listitem><para> a list containing the the parameters to be set.</para></listitem></varlistentry>
+ <listitem><para> a list containing the parameters to be set.</para></listitem></varlistentry>
<varlistentry><term>xopt :</term>
<listitem><para> a vector of double, the computed solution of the optimization problem.</para></listitem></varlistentry>
<varlistentry><term>fopt :</term>
- <listitem><para> a double, the function value at x</para></listitem></varlistentry>
+ <listitem><para> a double, the value of the function at x.</para></listitem></varlistentry>
<varlistentry><term>status :</term>
- <listitem><para> status flag returned from symphony. 227 is optimal, 228 is Time limit exceeded, 230 is iteration limit exceeded.</para></listitem></varlistentry>
+ <listitem><para> status flag returned from symphony. See below for details.</para></listitem></varlistentry>
<varlistentry><term>output :</term>
- <listitem><para> The output data structure contains detailed information about the optimization process. This version only contains number of iterations.</para></listitem></varlistentry>
+ <listitem><para> The output data structure contains detailed information about the optimization process. See below for details.</para></listitem></varlistentry>
</variablelist>
</refsection>
@@ -86,6 +86,25 @@ Search the minimum or maximum of a constrained mixed integer linear programming
The routine calls SYMPHONY written in C by gateway files for the actual computation.
</para>
<para>
+The status allows to know the status of the optimization which is given back by Ipopt.
+<itemizedlist>
+<listitem>status=227 : Optimal Solution Found </listitem>
+<listitem>status=228 : Maximum CPU Time exceeded.</listitem>
+<listitem>status=229 : Maximum Number of Node Limit Exceeded.</listitem>
+<listitem>status=230 : Maximum Number of Iterations Limit Exceeded.</listitem>
+</itemizedlist>
+ </para>
+ <para>
+For more details on status see the symphony documentation, go to http://www.coin-or.org/SYMPHONY/man-5.6/
+ </para>
+ <para>
+The output data structure contains detailed informations about the optimization process.
+It has type "struct" and contains the following fields.
+<itemizedlist>
+<listitem>output.iterations: The number of iterations performed during the search</listitem>
+</itemizedlist>
+ </para>
+ <para>
</para>
</refsection>
diff --git a/jar/scilab_en_US_help.jar b/jar/scilab_en_US_help.jar
index 4e1dc60..e7609d0 100644
--- a/jar/scilab_en_US_help.jar
+++ b/jar/scilab_en_US_help.jar
Binary files differ
diff --git a/macros/lsqlin.bin b/macros/lsqlin.bin
index 1359535..67446ac 100644
--- a/macros/lsqlin.bin
+++ b/macros/lsqlin.bin
Binary files differ
diff --git a/macros/lsqlin.sci b/macros/lsqlin.sci
index 9460424..532e6ad 100644
--- a/macros/lsqlin.sci
+++ b/macros/lsqlin.sci
@@ -31,13 +31,13 @@ function [xopt,resnorm,residual,exitflag,output,lambda] = lsqlin (varargin)
// lb : a vector of double, contains lower bounds of the variables.
// ub : a vector of double, contains upper bounds of the variables.
// x0 : a vector of double, contains initial guess of variables.
- // param : a list containing the the parameters to be set.
+ // param : a list containing the parameters to be set.
// xopt : a vector of double, the computed solution of the optimization problem.
// resnorm : a double, objective value returned as the scalar value norm(C*x-d)^2.
// residual : a vector of double, solution residuals returned as the vector d-C*x.
- // exitflag : A flag showing returned exit flag from Ipopt. It could be 0, 1 or 2 etc. i.e. Optimal, Maximum Number of Iterations Exceeded, CPU time exceeded. Other flags one can see in the lsqlin macro.
- // output : Structure containing information about the optimization. This version only contains number of iterations.
- // lambda : Structure containing the Lagrange multipliers at the solution x (separated by constraint type).It contains lower, upper bound multiplier and linear equality, inequality constraint multiplier.
+ // exitflag : The exit status. See below for details.
+ // output : The structure consist of statistics about the optimization. See below for details.
+ // lambda : The structure consist of the Lagrange multipliers at the solution of problem. See below for details.
//
// Description
// Search the minimum of a constrained linear least square problem specified by :
@@ -54,6 +54,35 @@ function [xopt,resnorm,residual,exitflag,output,lambda] = lsqlin (varargin)
//
// The routine calls Ipopt for solving the linear least square problem, Ipopt is a library written in C++.
//
+ // The exitflag allows to know the status of the optimization which is given back by Ipopt.
+ // <itemizedlist>
+ // <listitem>exitflag=0 : Optimal Solution Found </listitem>
+ // <listitem>exitflag=1 : Maximum Number of Iterations Exceeded. Output may not be optimal.</listitem>
+ // <listitem>exitflag=2 : Maximum CPU Time exceeded. Output may not be optimal.</listitem>
+ // <listitem>exitflag=3 : Stop at Tiny Step.</listitem>
+ // <listitem>exitflag=4 : Solved To Acceptable Level.</listitem>
+ // <listitem>exitflag=5 : Converged to a point of local infeasibility.</listitem>
+ // </itemizedlist>
+ //
+ // For more details on exitflag see the ipopt documentation, go to http://www.coin-or.org/Ipopt/documentation/
+ //
+ // The output data structure contains detailed informations about the optimization process.
+ // It has type "struct" and contains the following fields.
+ // <itemizedlist>
+ // <listitem>output.iterations: The number of iterations performed during the search</listitem>
+ // <listitem>output.constrviolation: The max-norm of the constraint violation.</listitem>
+ // </itemizedlist>
+ //
+ // The lambda data structure contains the Lagrange multipliers at the end
+ // of optimization. In the current version the values are returned only when the the solution is optimal.
+ // It has type "struct" and contains the following fields.
+ // <itemizedlist>
+ // <listitem>lambda.lower: The Lagrange multipliers for the lower bound constraints.</listitem>
+ // <listitem>lambda.upper: The Lagrange multipliers for the upper bound constraints.</listitem>
+ // <listitem>lambda.eqlin: The Lagrange multipliers for the linear equality constraints.</listitem>
+ // <listitem>lambda.ineqlin: The Lagrange multipliers for the linear inequality constraints.</listitem>
+ // </itemizedlist>
+ //
// Examples
// //A simple linear least square example
// C = [ 2 0;
@@ -330,11 +359,13 @@ function [xopt,resnorm,residual,exitflag,output,lambda] = lsqlin (varargin)
residual = d-C*xopt;
resnorm = residual'*residual;
exitflag = status;
- output = struct("Iterations" , []);
+ output = struct("Iterations" , [], ..
+ "ConstrViolation" ,[]);
output.Iterations = iter;
+ output.ConstrViolation = max([0;norm(Aeq*xopt-beq, 'inf');(lb'-xopt);(xopt-ub');(A*xopt-b)]);
lambda = struct("lower" , [], ..
- "upper" , [], ..
- "eqlin" , [], ..
+ "upper" , [], ..
+ "eqlin" , [], ..
"ineqlin" , []);
lambda.lower = Zl;
diff --git a/macros/lsqnonneg.bin b/macros/lsqnonneg.bin
index b480250..bc44ed5 100644
--- a/macros/lsqnonneg.bin
+++ b/macros/lsqnonneg.bin
Binary files differ
diff --git a/macros/lsqnonneg.sci b/macros/lsqnonneg.sci
index 80ec92a..d95ee86 100644
--- a/macros/lsqnonneg.sci
+++ b/macros/lsqnonneg.sci
@@ -24,9 +24,9 @@ function [xopt,resnorm,residual,exitflag,output,lambda] = lsqnonneg (varargin)
// xopt : a vector of double, the computed solution of the optimization problem.
// resnorm : a double, objective value returned as the scalar value norm(C*x-d)^2.
// residual : a vector of double, solution residuals returned as the vector d-C*x.
- // exitflag : A flag showing returned exit flag from Ipopt. It could be 0, 1 or 2 etc. i.e. Optimal, Maximum Number of Iterations Exceeded, CPU time exceeded. Other flags one can see in the lsqlin macro.
- // output : Structure containing information about the optimization. This version only contains number of iterations.
- // lambda : Structure containing the Lagrange multipliers at the solution xopt. It contains lower, upper bound multiplier and linear equality, inequality constraint multiplier.
+ // exitflag : The exit status. See below for details.
+ // output : The structure consist of statistics about the optimization. See below for details.
+ // lambda : The structure consist of the Lagrange multipliers at the solution of problem. See below for details.
//
// Description
// Solves nonnegative least-squares curve fitting problems specified by :
@@ -40,6 +40,33 @@ function [xopt,resnorm,residual,exitflag,output,lambda] = lsqnonneg (varargin)
// </latex>
//
// The routine calls Ipopt for solving the nonnegative least-squares curve fitting problems, Ipopt is a library written in C++.
+ //
+ // The exitflag allows to know the status of the optimization which is given back by Ipopt.
+ // <itemizedlist>
+ // <listitem>exitflag=0 : Optimal Solution Found </listitem>
+ // <listitem>exitflag=1 : Maximum Number of Iterations Exceeded. Output may not be optimal.</listitem>
+ // <listitem>exitflag=2 : Maximum CPU Time exceeded. Output may not be optimal.</listitem>
+ // <listitem>exitflag=3 : Stop at Tiny Step.</listitem>
+ // <listitem>exitflag=4 : Solved To Acceptable Level.</listitem>
+ // <listitem>exitflag=5 : Converged to a point of local infeasibility.</listitem>
+ // </itemizedlist>
+ //
+ // For more details on exitflag see the ipopt documentation, go to http://www.coin-or.org/Ipopt/documentation/
+ //
+ // The output data structure contains detailed informations about the optimization process.
+ // It has type "struct" and contains the following fields.
+ // <itemizedlist>
+ // <listitem>output.iterations: The number of iterations performed during the search</listitem>
+ // <listitem>output.constrviolation: The max-norm of the constraint violation.</listitem>
+ // </itemizedlist>
+ //
+ // The lambda data structure contains the Lagrange multipliers at the end
+ // of optimization. In the current version the values are returned only when the the solution is optimal.
+ // It has type "struct" and contains the following fields.
+ // <itemizedlist>
+ // <listitem>lambda.lower: The Lagrange multipliers for the lower bound constraints.</listitem>
+ // <listitem>lambda.upper: The Lagrange multipliers for the upper bound constraints.</listitem>
+ // </itemizedlist>
//
// Examples
// // A basic lsqnonneg problem
@@ -136,13 +163,15 @@ function [xopt,resnorm,residual,exitflag,output,lambda] = lsqnonneg (varargin)
residual = -1*(C*xopt-d);
resnorm = residual'*residual;
exitflag = status;
- output = struct("Iterations" , []);
+ output = struct("Iterations" , [], ..
+ "ConstrViolation" ,[]);
output.Iterations = iter;
- lambda = struct("lower" , [], ..
- "upper" , []);
-
- lambda.lower = Zl;
- lambda.upper = Zu;
+ output.ConstrViolation = max([0;(lb'-xopt);(xopt-ub')]);
+
+ lambda = struct("lower" , [], ..
+ "upper" , []);
+ lambda.lower = Zl;
+ lambda.upper = Zu;
select status
case 0 then
diff --git a/macros/qpipopt.bin b/macros/qpipopt.bin
index 19a7040..71c0d8e 100644
--- a/macros/qpipopt.bin
+++ b/macros/qpipopt.bin
Binary files differ
diff --git a/macros/qpipopt.sci b/macros/qpipopt.sci
index e8c945a..33b31bb 100644
--- a/macros/qpipopt.sci
+++ b/macros/qpipopt.sci
@@ -26,16 +26,16 @@ function [xopt,fopt,exitflag,output,lambda] = qpipopt (varargin)
// f : a vector of double, represents coefficients of linear in the quadratic problem
// lb : a vector of double, contains lower bounds of the variables.
// ub : a vector of double, contains upper bounds of the variables.
- // A : a matrix of double, contains matrix representing the constraint matrix
+ // A : a matrix of double, contains the constraint matrix
// conLB : a vector of double, contains lower bounds of the constraints.
// conUB : a vector of double, contains upper bounds of the constraints.
// x0 : a vector of double, contains initial guess of variables.
- // param : a list containing the the parameters to be set.
+ // param : a list containing the parameters to be set.
// xopt : a vector of double, the computed solution of the optimization problem.
- // fopt : a double, the function value at x.
- // exitflag : A flag showing returned exit flag from Ipopt. It could be 0, 1 or 2 etc. i.e. Optimal, Maximum Number of Iterations Exceeded, CPU time exceeded. Other flags one can see in the lsqlin macro.
- // output : Structure containing information about the optimization. This version only contains number of iterations
- // lambda : Structure containing the Lagrange multipliers at the solution x (separated by constraint type).It contains lower, upper bound multiplier and linear equality, inequality constraint multiplier.
+ // fopt : a double, the value of the function at x.
+ // exitflag : The exit status. See below for details.
+ // output : The structure consist of statistics about the optimization. See below for details.
+ // lambda : The structure consist of the Lagrange multipliers at the solution of problem. See below for details.
//
// Description
// Search the minimum of a constrained linear quadratic optimization problem specified by :
@@ -50,6 +50,35 @@ function [xopt,fopt,exitflag,output,lambda] = qpipopt (varargin)
// </latex>
//
// The routine calls Ipopt for solving the quadratic problem, Ipopt is a library written in C++.
+ //
+ // The exitflag allows to know the status of the optimization which is given back by Ipopt.
+ // <itemizedlist>
+ // <listitem>exitflag=0 : Optimal Solution Found </listitem>
+ // <listitem>exitflag=1 : Maximum Number of Iterations Exceeded. Output may not be optimal.</listitem>
+ // <listitem>exitflag=2 : Maximum CPU Time exceeded. Output may not be optimal.</listitem>
+ // <listitem>exitflag=3 : Stop at Tiny Step.</listitem>
+ // <listitem>exitflag=4 : Solved To Acceptable Level.</listitem>
+ // <listitem>exitflag=5 : Converged to a point of local infeasibility.</listitem>
+ // </itemizedlist>
+ //
+ // For more details on exitflag see the ipopt documentation, go to http://www.coin-or.org/Ipopt/documentation/
+ //
+ // The output data structure contains detailed informations about the optimization process.
+ // It has type "struct" and contains the following fields.
+ // <itemizedlist>
+ // <listitem>output.iterations: The number of iterations performed during the search</listitem>
+ // <listitem>output.constrviolation: The max-norm of the constraint violation.</listitem>
+ // </itemizedlist>
+ //
+ // The lambda data structure contains the Lagrange multipliers at the end
+ // of optimization. In the current version the values are returned only when the the solution is optimal.
+ // It has type "struct" and contains the following fields.
+ // <itemizedlist>
+ // <listitem>lambda.lower: The Lagrange multipliers for the lower bound constraints.</listitem>
+ // <listitem>lambda.upper: The Lagrange multipliers for the upper bound constraints.</listitem>
+ // <listitem>lambda.eqlin: The Lagrange multipliers for the linear equality constraints.</listitem>
+ // <listitem>lambda.ineqlin: The Lagrange multipliers for the linear inequality constraints.</listitem>
+ // </itemizedlist>
//
// Examples
// //Ref : example 14 :
@@ -316,12 +345,14 @@ function [xopt,fopt,exitflag,output,lambda] = qpipopt (varargin)
end
end
- [xopt,fopt,status,iter,Zl,Zu,lmbda] = solveqp(nbVar,nbCon,H,f,A,conLB,conUB,lb,ub,x0,options);
+ [xopt,fopt,status,iter,Zl,Zu,lmbda] = solveqp(nbVar,nbCon,H,f,A,conLB,conUB,lb,ub,x0,options);
xopt = xopt';
exitflag = status;
- output = struct("Iterations" , []);
- output.Iterations = iter;
+ output = struct("Iterations" , [], ..
+ "ConstrViolation" ,[]);
+ output.Iterations = iter;
+ output.ConstrViolation = max([0;(conLB'-A*xopt);(A*xopt - conUB');(lb'-xopt);(xopt-ub')]);
lambda = struct("lower" , [], ..
"upper" , [], ..
"constraint" , []);
@@ -331,7 +362,6 @@ function [xopt,fopt,exitflag,output,lambda] = qpipopt (varargin)
lambda.constraint = lmbda;
select status
-
case 0 then
printf("\nOptimal Solution Found.\n");
case 1 then
@@ -367,5 +397,4 @@ function [xopt,fopt,exitflag,output,lambda] = qpipopt (varargin)
break;
end
-
endfunction
diff --git a/macros/qpipoptmat.bin b/macros/qpipoptmat.bin
index 817f0f9..5dd2df1 100644
--- a/macros/qpipoptmat.bin
+++ b/macros/qpipoptmat.bin
Binary files differ
diff --git a/macros/qpipoptmat.sci b/macros/qpipoptmat.sci
index d019aa1..f501094 100644
--- a/macros/qpipoptmat.sci
+++ b/macros/qpipoptmat.sci
@@ -32,13 +32,13 @@ function [xopt,fopt,exitflag,output,lambda] = qpipoptmat (varargin)
// lb : a vector of double, contains lower bounds of the variables.
// ub : a vector of double, contains upper bounds of the variables.
// x0 : a vector of double, contains initial guess of variables.
- // param : a list containing the the parameters to be set.
+ // param : a list containing the parameters to be set.
// xopt : a vector of double, the computed solution of the optimization problem.
- // fopt : a double, the function value at x.
+ // fopt : a double, the value of the function at x.
// residual : a vector of double, solution residuals returned as the vector d-C*x.
- // exitflag : A flag showing returned exit flag from Ipopt. It could be 0, 1 or 2 etc. i.e. Optimal, Maximum Number of Iterations Exceeded, CPU time exceeded. Other flags one can see in the lsqlin macro.
- // output : Structure containing information about the optimization. This version only contains number of iterations.
- // lambda : Structure containing the Lagrange multipliers at the solution x (separated by constraint type).It contains lower, upper bound multiplier and linear equality, inequality constraint multiplier.
+ // exitflag : The exit status. See below for details.
+ // output : The structure consist of statistics about the optimization. See below for details.
+ // lambda : The structure consist of the Lagrange multipliers at the solution of problem. See below for details.
//
// Description
// Search the minimum of a constrained linear quadratic optimization problem specified by :
@@ -55,6 +55,35 @@ function [xopt,fopt,exitflag,output,lambda] = qpipoptmat (varargin)
//
// The routine calls Ipopt for solving the quadratic problem, Ipopt is a library written in C++.
//
+ // The exitflag allows to know the status of the optimization which is given back by Ipopt.
+ // <itemizedlist>
+ // <listitem>exitflag=0 : Optimal Solution Found </listitem>
+ // <listitem>exitflag=1 : Maximum Number of Iterations Exceeded. Output may not be optimal.</listitem>
+ // <listitem>exitflag=2 : Maximum CPU Time exceeded. Output may not be optimal.</listitem>
+ // <listitem>exitflag=3 : Stop at Tiny Step.</listitem>
+ // <listitem>exitflag=4 : Solved To Acceptable Level.</listitem>
+ // <listitem>exitflag=5 : Converged to a point of local infeasibility.</listitem>
+ // </itemizedlist>
+ //
+ // For more details on exitflag see the ipopt documentation, go to http://www.coin-or.org/Ipopt/documentation/
+ //
+ // The output data structure contains detailed informations about the optimization process.
+ // It has type "struct" and contains the following fields.
+ // <itemizedlist>
+ // <listitem>output.iterations: The number of iterations performed during the search</listitem>
+ // <listitem>output.constrviolation: The max-norm of the constraint violation.</listitem>
+ // </itemizedlist>
+ //
+ // The lambda data structure contains the Lagrange multipliers at the end
+ // of optimization. In the current version the values are returned only when the the solution is optimal.
+ // It has type "struct" and contains the following fields.
+ // <itemizedlist>
+ // <listitem>lambda.lower: The Lagrange multipliers for the lower bound constraints.</listitem>
+ // <listitem>lambda.upper: The Lagrange multipliers for the upper bound constraints.</listitem>
+ // <listitem>lambda.eqlin: The Lagrange multipliers for the linear equality constraints.</listitem>
+ // <listitem>lambda.ineqlin: The Lagrange multipliers for the linear inequality constraints.</listitem>
+ // </itemizedlist>
+ //
// Examples
// //Ref : example 14 :
// //https://www.me.utexas.edu/~jensen/ORMM/supplements/methods/nlpmethod/S2_quadratic.pdf
@@ -94,15 +123,15 @@ function [xopt,fopt,exitflag,output,lambda] = qpipoptmat (varargin)
// Keyur Joshi, Saikiran, Iswarya, Harpreet Singh
-//To check the number of input and output argument
- [lhs , rhs] = argn();
-
-//To check the number of argument given by user
- if ( rhs < 2 | rhs == 3 | rhs == 5 | rhs == 7 | rhs > 10 ) then
- errmsg = msprintf(gettext("%s: Unexpected number of input arguments : %d provided while should be in the set of [2 4 6 8 9 10]"), "qpipoptmat", rhs);
- error(errmsg)
- end
-
+ //To check the number of input and output argument
+ [lhs , rhs] = argn();
+
+ //To check the number of argument given by user
+ if ( rhs < 2 | rhs == 3 | rhs == 5 | rhs == 7 | rhs > 10 ) then
+ errmsg = msprintf(gettext("%s: Unexpected number of input arguments : %d provided while should be in the set of [2 4 6 8 9 10]"), "qpipoptmat", rhs);
+ error(errmsg)
+ end
+
H = [];
f = [];
A = [];
@@ -116,242 +145,240 @@ function [xopt,fopt,exitflag,output,lambda] = qpipoptmat (varargin)
f = varargin(2);
nbVar = size(H,1);
-
- if ( rhs<3 ) then
- A = []
- b = []
- else
- A = varargin(3);
- b = varargin(4);
- end
-
- if ( rhs<5 ) then
- Aeq = []
- beq = []
- else
- Aeq = varargin(5);
- beq = varargin(6);
- end
-
- if ( rhs<7 ) then
- lb = repmat(-%inf,nbVar,1);
- ub = repmat(%inf,nbVar,1);
- else
- lb = varargin(7);
- ub = varargin(8);
- end
-
-
- if ( rhs<9 | size(varargin(9)) ==0 ) then
- x0 = repmat(0,nbVar,1)
- else
- x0 = varargin(9);
- end
-
- if ( rhs<10 | size(varargin(10)) ==0 ) then
- param = list();
- else
- param =varargin(10);
- end
-
- if (size(lb,2)==0) then
- lb = repmat(-%inf,nbVar,1);
- end
-
- if (size(ub,2)==0) then
- ub = repmat(%inf,nbVar,1);
- end
- if (size(f,2)==0) then
- f = repmat(0,nbVar,1);
- end
+ if ( rhs<3 ) then
+ A = []
+ b = []
+ else
+ A = varargin(3);
+ b = varargin(4);
+ end
+
+ if ( rhs<5 ) then
+ Aeq = []
+ beq = []
+ else
+ Aeq = varargin(5);
+ beq = varargin(6);
+ end
- if (type(param) ~= 15) then
- errmsg = msprintf(gettext("%s: param should be a list "), "qpipoptmat");
- error(errmsg);
- end
-
+ if ( rhs<7 ) then
+ lb = repmat(-%inf,nbVar,1);
+ ub = repmat(%inf,nbVar,1);
+ else
+ lb = varargin(7);
+ ub = varargin(8);
+ end
- if (modulo(size(param),2)) then
- errmsg = msprintf(gettext("%s: Size of parameters should be even"), "qpipoptmat");
- error(errmsg);
- end
-
- options = list(..
- "MaxIter" , [3000], ...
- "CpuTime" , [600] ...
- );
-
- for i = 1:(size(param))/2
-
- select param(2*i-1)
- case "MaxIter" then
- options(2*i) = param(2*i);
- case "CpuTime" then
- options(2*i) = param(2*i);
- else
- errmsg = msprintf(gettext("%s: Unrecognized parameter name ''%s''."), "qpipoptmat", param(2*i-1));
- error(errmsg)
- end
- end
-
- nbConInEq = size(A,1);
- nbConEq = size(Aeq,1);
-
-// Check if the user gives row vector
-// and Changing it to a column matrix
-
-
- if (size(f,2)== [nbVar]) then
- f=f';
- end
-
- if (size(lb,2)== [nbVar]) then
- lb = lb';
- end
+ if ( rhs<9 | size(varargin(9)) ==0 ) then
+ x0 = repmat(0,nbVar,1)
+ else
+ x0 = varargin(9);
+ end
- if (size(ub,2)== [nbVar]) then
- ub = ub';
- end
+ if ( rhs<10 | size(varargin(10)) ==0 ) then
+ param = list();
+ else
+ param =varargin(10);
+ end
+
+ if (size(lb,2)==0) then
+ lb = repmat(-%inf,nbVar,1);
+ end
- if (size(b,2)==nbConInEq) then
- b = b';
- end
+ if (size(ub,2)==0) then
+ ub = repmat(%inf,nbVar,1);
+ end
- if (size(beq,2)== nbConEq) then
- beq = beq';
- end
+ if (size(f,2)==0) then
+ f = repmat(0,nbVar,1);
+ end
- if (size(x0,2)== [nbVar]) then
- x0=x0';
- end
+ if (type(param) ~= 15) then
+ errmsg = msprintf(gettext("%s: param should be a list "), "qpipoptmat");
+ error(errmsg);
+ end
- //Checking the H matrix which needs to be a symmetric matrix
- if ( ~isequal(H,H')) then
- errmsg = msprintf(gettext("%s: H is not a symmetric matrix"), "qpipoptmat");
- error(errmsg);
- end
+ if (modulo(size(param),2)) then
+ errmsg = msprintf(gettext("%s: Size of parameters should be even"), "qpipoptmat");
+ error(errmsg);
+ end
+
+ options = list(..
+ "MaxIter" , [3000], ...
+ "CpuTime" , [600] ...
+ );
+
+ for i = 1:(size(param))/2
+
+ select param(2*i-1)
+ case "MaxIter" then
+ options(2*i) = param(2*i);
+ case "CpuTime" then
+ options(2*i) = param(2*i);
+ else
+ errmsg = msprintf(gettext("%s: Unrecognized parameter name ''%s''."), "qpipoptmat", param(2*i-1));
+ error(errmsg)
+ end
+ end
+
+ nbConInEq = size(A,1);
+ nbConEq = size(Aeq,1);
+
+ // Check if the user gives row vector
+ // and Changing it to a column matrix
+
+ if (size(f,2)== [nbVar]) then
+ f=f';
+ end
+
+ if (size(lb,2)== [nbVar]) then
+ lb = lb';
+ end
+
+ if (size(ub,2)== [nbVar]) then
+ ub = ub';
+ end
+
+ if (size(b,2)==nbConInEq) then
+ b = b';
+ end
+
+ if (size(beq,2)== nbConEq) then
+ beq = beq';
+ end
+
+ if (size(x0,2)== [nbVar]) then
+ x0=x0';
+ end
+
+ //Checking the H matrix which needs to be a symmetric matrix
+ if ( ~isequal(H,H')) then
+ errmsg = msprintf(gettext("%s: H is not a symmetric matrix"), "qpipoptmat");
+ error(errmsg);
+ end
+
+ //Check the size of f which should equal to the number of variable
+ if ( size(f,1) ~= [nbVar]) then
+ errmsg = msprintf(gettext("%s: The number of rows and columns in H must be equal the number of elements of f"), "qpipoptmat");
+ error(errmsg);
+ end
+
+ //Check the size of inequality constraint which should be equal to the number of variables
+ if ( size(A,2) ~= nbVar & size(A,2) ~= 0) then
+ errmsg = msprintf(gettext("%s: The number of columns in A must be the same as the number of elements of f"), "qpipoptmat");
+ error(errmsg);
+ end
+
+ //Check the size of equality constraint which should be equal to the number of variables
+ if ( size(Aeq,2) ~= nbVar & size(Aeq,2) ~= 0 ) then
+ errmsg = msprintf(gettext("%s: The number of columns in Aeq must be the same as the number of elements of f"), "qpipoptmat");
+ error(errmsg);
+ end
+
+
+ //Check the size of Lower Bound which should be equal to the number of variables
+ if ( size(lb,1) ~= nbVar) then
+ errmsg = msprintf(gettext("%s: The Lower Bound is not equal to the number of variables"), "qpipoptmat");
+ error(errmsg);
+ end
+
+ //Check the size of Upper Bound which should equal to the number of variables
+ if ( size(ub,1) ~= nbVar) then
+ errmsg = msprintf(gettext("%s: The Upper Bound is not equal to the number of variables"), "qpipoptmat");
+ error(errmsg);
+ end
+
+ //Check the size of constraints of Lower Bound which should equal to the number of constraints
+ if ( size(b,1) ~= nbConInEq & size(b,1) ~= 0) then
+ errmsg = msprintf(gettext("%s: The number of rows in A must be the same as the number of elementsof b"), "qpipoptmat");
+ error(errmsg);
+ end
+
+ //Check the size of constraints of Upper Bound which should equal to the number of constraints
+ if ( size(beq,1) ~= nbConEq & size(beq,1) ~= 0) then
+ errmsg = msprintf(gettext("%s: The number of rows in Aeq must be the same as the number of elements of beq"), "qpipoptmat");
+ error(errmsg);
+ end
+
+ //Check the size of initial of variables which should equal to the number of variables
+ if ( size(x0,1) ~= nbVar) then
+ warnmsg = msprintf(gettext("%s: Ignoring initial guess of variables as it is not equal to the number of variables"), "qpipoptmat");
+ warning(warnmsg);
+ x0 = repmat(0,nbVar,1);
+ end
+
+ //Check if the user gives a matrix instead of a vector
+
+ if ((size(f,1)~=1)& (size(f,2)~=1)) then
+ errmsg = msprintf(gettext("%s: f should be a vector"), "qpipoptmat");
+ error(errmsg);
+ end
+
+ if (size(lb,1)~=1)& (size(ub,2)~=1) then
+ errmsg = msprintf(gettext("%s: Lower Bound should be a vector"), "qpipoptmat");
+ error(errmsg);
+ end
+
+ if (size(ub,1)~=1)& (size(ub,2)~=1) then
+ errmsg = msprintf(gettext("%s: Upper Bound should be a vector"), "qpipoptmat");
+ error(errmsg);
+ end
+
+ if (nbConInEq) then
+ if ((size(b,1)~=1)& (size(b,2)~=1)) then
+ errmsg = msprintf(gettext("%s: Constraint Lower Bound should be a vector"), "qpipoptmat");
+ error(errmsg);
+ end
+ end
+
+ if (nbConEq) then
+ if (size(beq,1)~=1)& (size(beq,2)~=1) then
+ errmsg = msprintf(gettext("%s: Constraint should be a vector"), "qpipoptmat");
+ error(errmsg);
+ end
+ end
-
- //Check the size of f which should equal to the number of variable
- if ( size(f,1) ~= [nbVar]) then
- errmsg = msprintf(gettext("%s: The number of rows and columns in H must be equal the number of elements of f"), "qpipoptmat");
- error(errmsg);
- end
-
- //Check the size of inequality constraint which should be equal to the number of variables
- if ( size(A,2) ~= nbVar & size(A,2) ~= 0) then
- errmsg = msprintf(gettext("%s: The number of columns in A must be the same as the number of elements of f"), "qpipoptmat");
- error(errmsg);
- end
-
- //Check the size of equality constraint which should be equal to the number of variables
- if ( size(Aeq,2) ~= nbVar & size(Aeq,2) ~= 0 ) then
- errmsg = msprintf(gettext("%s: The number of columns in Aeq must be the same as the number of elements of f"), "qpipoptmat");
- error(errmsg);
- end
-
-
- //Check the size of Lower Bound which should be equal to the number of variables
- if ( size(lb,1) ~= nbVar) then
- errmsg = msprintf(gettext("%s: The Lower Bound is not equal to the number of variables"), "qpipoptmat");
- error(errmsg);
- end
-
- //Check the size of Upper Bound which should equal to the number of variables
- if ( size(ub,1) ~= nbVar) then
- errmsg = msprintf(gettext("%s: The Upper Bound is not equal to the number of variables"), "qpipoptmat");
- error(errmsg);
- end
-
- //Check the size of constraints of Lower Bound which should equal to the number of constraints
- if ( size(b,1) ~= nbConInEq & size(b,1) ~= 0) then
- errmsg = msprintf(gettext("%s: The number of rows in A must be the same as the number of elementsof b"), "qpipoptmat");
- error(errmsg);
- end
-
- //Check the size of constraints of Upper Bound which should equal to the number of constraints
- if ( size(beq,1) ~= nbConEq & size(beq,1) ~= 0) then
- errmsg = msprintf(gettext("%s: The number of rows in Aeq must be the same as the number of elements of beq"), "qpipoptmat");
- error(errmsg);
- end
-
- //Check the size of initial of variables which should equal to the number of variables
- if ( size(x0,1) ~= nbVar) then
- warnmsg = msprintf(gettext("%s: Ignoring initial guess of variables as it is not equal to the number of variables"), "qpipoptmat");
- warning(warnmsg);
- x0 = repmat(0,nbVar,1);
- end
-
- //Check if the user gives a matrix instead of a vector
-
- if ((size(f,1)~=1)& (size(f,2)~=1)) then
- errmsg = msprintf(gettext("%s: f should be a vector"), "qpipoptmat");
- error(errmsg);
- end
-
- if (size(lb,1)~=1)& (size(ub,2)~=1) then
- errmsg = msprintf(gettext("%s: Lower Bound should be a vector"), "qpipoptmat");
- error(errmsg);
- end
-
- if (size(ub,1)~=1)& (size(ub,2)~=1) then
- errmsg = msprintf(gettext("%s: Upper Bound should be a vector"), "qpipoptmat");
- error(errmsg);
- end
-
- if (nbConInEq) then
- if ((size(b,1)~=1)& (size(b,2)~=1)) then
- errmsg = msprintf(gettext("%s: Constraint Lower Bound should be a vector"), "qpipoptmat");
- error(errmsg);
- end
- end
-
- if (nbConEq) then
- if (size(beq,1)~=1)& (size(beq,2)~=1) then
- errmsg = msprintf(gettext("%s: Constraint should be a vector"), "qpipoptmat");
- error(errmsg);
- end
- end
-
for i = 1:nbConInEq
if (b(i) == -%inf)
errmsg = msprintf(gettext("%s: Value of b can not be negative infinity"), "qpipoptmat");
- error(errmsg);
- end
+ error(errmsg);
+ end
end
-
+
for i = 1:nbConEq
if (beq(i) == -%inf)
errmsg = msprintf(gettext("%s: Value of beq can not be negative infinity"), "qpipoptmat");
- error(errmsg);
- end
+ error(errmsg);
+ end
end
- //Converting it into ipopt format
- f = f';
- lb = lb';
- ub = ub';
- x0 = x0';
- conMatrix = [Aeq;A];
- nbCon = size(conMatrix,1);
- conLB = [beq; repmat(-%inf,nbConInEq,1)]';
- conUB = [beq;b]' ;
- [xopt,fopt,status,iter,Zl,Zu,lmbda] = solveqp(nbVar,nbCon,H,f,conMatrix,conLB,conUB,lb,ub,x0,options);
-
- xopt = xopt';
- exitflag = status;
- output = struct("Iterations" , []);
- output.Iterations = iter;
- lambda = struct("lower" , [], ..
- "upper" , [], ..
- "eqlin" , [], ..
+ //Converting it into ipopt format
+ f = f';
+ lb = lb';
+ ub = ub';
+ x0 = x0';
+ conMatrix = [Aeq;A];
+ nbCon = size(conMatrix,1);
+ conLB = [beq; repmat(-%inf,nbConInEq,1)]';
+ conUB = [beq;b]' ;
+
+ [xopt,fopt,status,iter,Zl,Zu,lmbda] = solveqp(nbVar,nbCon,H,f,conMatrix,conLB,conUB,lb,ub,x0,options);
+ xopt = xopt';
+ exitflag = status;
+ output = struct("Iterations" , [], ..
+ "ConstrViolation" ,[]);
+ output.Iterations = iter;
+ output.ConstrViolation = max([0;norm(Aeq*xopt-beq, 'inf');(lb'-xopt);(xopt-ub');(A*xopt-b)]);
+ lambda = struct("lower" , [], ..
+ "upper" , [], ..
+ "eqlin" , [], ..
"ineqlin" , []);
-
- lambda.lower = Zl;
- lambda.upper = Zu;
- lambda.eqlin = lmbda(1:nbConEq);
- lambda.ineqlin = lmbda(nbConEq+1:nbCon);
+
+ lambda.lower = Zl;
+ lambda.upper = Zu;
+ lambda.eqlin = lmbda(1:nbConEq);
+ lambda.ineqlin = lmbda(nbConEq+1:nbCon);
select status
diff --git a/macros/symphony.bin b/macros/symphony.bin
index 87b6444..0259139 100644
--- a/macros/symphony.bin
+++ b/macros/symphony.bin
Binary files differ
diff --git a/macros/symphony.sci b/macros/symphony.sci
index d465b90..686eb5a 100644
--- a/macros/symphony.sci
+++ b/macros/symphony.sci
@@ -29,11 +29,11 @@ function [xopt,fopt,status,output] = symphony (varargin)
// conLB : a vector of double, represents lower bounds of the constraints.
// conUB : a vector of double, represents upper bounds of the constraints
// objSense : The sense (maximization/minimization) of the objective. Use 1(sym_minimize ) or -1 (sym_maximize) here.
- // options : a list containing the the parameters to be set.
+ // options : a list containing the parameters to be set.
// xopt : a vector of double, the computed solution of the optimization problem.
- // fopt : a double, the function value at x.
- // status : status flag returned from symphony. 227 is optimal, 228 is Time limit exceeded, 230 is iteration limit exceeded.
- // output : The output data structure contains detailed information about the optimization process. This version only contains number of iterations
+ // fopt : a double, the value of the function at x.
+ // status : status flag returned from symphony.See below for details.
+ // output : The output data structure contains detailed information about the optimization process. See below for details.
//
// Description
// Search the minimum or maximum of a constrained mixed integer linear programming optimization problem specified by :
@@ -50,6 +50,22 @@ function [xopt,fopt,status,output] = symphony (varargin)
//
// The routine calls SYMPHONY written in C by gateway files for the actual computation.
//
+ // The status allows to know the status of the optimization which is given back by Ipopt.
+ // <itemizedlist>
+ // <listitem>status=227 : Optimal Solution Found </listitem>
+ // <listitem>status=228 : Maximum CPU Time exceeded.</listitem>
+ // <listitem>status=229 : Maximum Number of Node Limit Exceeded.</listitem>
+ // <listitem>status=230 : Maximum Number of Iterations Limit Exceeded.</listitem>
+ // </itemizedlist>
+ //
+ // For more details on status see the symphony documentation, go to http://www.coin-or.org/SYMPHONY/man-5.6/
+ //
+ // The output data structure contains detailed informations about the optimization process.
+ // It has type "struct" and contains the following fields.
+ // <itemizedlist>
+ // <listitem>output.iterations: The number of iterations performed during the search</listitem>
+ // </itemizedlist>
+ //
// Examples
// //Reference: Westerberg, Carl-Henrik, Bengt Bjorklund, and Eskil Hultman. "An application of mixed integer programming in a Swedish steel mill." Interfaces 7, no. 2 (1977): 39-43.
// // Objective function
@@ -179,6 +195,7 @@ function [xopt,fopt,status,output] = symphony (varargin)
A = [];
conLB = [];
conUB = [];
+ options = list();
nbVar = varargin(1);
nbCon = varargin(2);
diff --git a/macros/symphony_call.bin b/macros/symphony_call.bin
index 53671fa..5e0d5e1 100644
--- a/macros/symphony_call.bin
+++ b/macros/symphony_call.bin
Binary files differ
diff --git a/macros/symphony_call.sci b/macros/symphony_call.sci
index af066f4..80b22d0 100644
--- a/macros/symphony_call.sci
+++ b/macros/symphony_call.sci
@@ -9,7 +9,7 @@
// Organization: FOSSEE, IIT Bombay
// Email: toolbox@scilab.in
-function [xopt,fopt,status,output] = symphony_call(nbVar,nbCon,objCoef,isInt,LB,UB,conMatrix,conLB,conUB,objSense,options)
+function [xopt,fopt,status,output] = symphony_call(nbVar,nbCon,objCoef,isInt,lb,ub,A,conLB,conUB,objSense,options)
xopt = [];
fopt = [];
@@ -23,12 +23,12 @@ function [xopt,fopt,status,output] = symphony_call(nbVar,nbCon,objCoef,isInt,LB,
setOptions(options);
//Choosing to launch basic or advanced version
- if(~issparse(conMatrix)) then
- sym_loadProblemBasic(nbVar,nbCon,LB,UB,objCoef,isInt,objSense,conMatrix,conLB,conUB);
+ if(~issparse(A)) then
+ sym_loadProblemBasic(nbVar,nbCon,lb,ub,objCoef,isInt,objSense,A,conLB,conUB);
else
// Changing to Constraint Matrix into sparse matrix
- conMatrix_advanced=sparse(conMatrix);
- sym_loadProblem(nbVar,nbCon,LB,UB,objCoef,isInt,objSense,conMatrix_advanced,conLB,conUB);
+ A_advanced=sparse(A);
+ sym_loadProblem(nbVar,nbCon,lb,ub,objCoef,isInt,objSense,A_advanced,conLB,conUB);
end
op = sym_solve();
@@ -44,8 +44,8 @@ function [xopt,fopt,status,output] = symphony_call(nbVar,nbCon,objCoef,isInt,LB,
status = sym_getStatus();
- output = struct("Iterations" , []);
-
+ output = struct("Iterations" , []);
+
output.Iterations = sym_getIterCount();
diff --git a/macros/symphonymat.bin b/macros/symphonymat.bin
index eacbd5c..5534f4d 100644
--- a/macros/symphonymat.bin
+++ b/macros/symphonymat.bin
Binary files differ
diff --git a/macros/symphonymat.sci b/macros/symphonymat.sci
index 67e64c5..9dd11a8 100644
--- a/macros/symphonymat.sci
+++ b/macros/symphonymat.sci
@@ -28,11 +28,11 @@ function [xopt,fopt,status,iter] = symphonymat (varargin)
// beq : Linear equality constraint vector, specified as a vector of double. beq represents the constant vector in the constraints Aeq*x = beq. beq has size equals to the number of rows in Aeq.
// lb : Lower bounds, specified as a vector or array of double. lb represents the lower bounds elementwise in lb ≤ x ≤ ub.
// ub : Upper bounds, specified as a vector or array of double. ub represents the upper bounds elementwise in lb ≤ x ≤ ub.
- // options : a list containing the the parameters to be set.
+ // options : a list containing the parameters to be set.
// xopt : a vector of double, the computed solution of the optimization problem.
- // fopt : a double, the function value at x
- // status : status flag returned from symphony. 227 is optimal, 228 is Time limit exceeded, 230 is iteration limit exceeded.
- // output : The output data structure contains detailed information about the optimization process. This version only contains number of iterations.
+ // fopt : a double, the value of the function at x.
+ // status : status flag returned from symphony. See below for details.
+ // output : The output data structure contains detailed information about the optimization process. See below for details.
//
// Description
// Search the minimum or maximum of a constrained mixed integer linear programming optimization problem specified by :
@@ -50,6 +50,22 @@ function [xopt,fopt,status,iter] = symphonymat (varargin)
//
// The routine calls SYMPHONY written in C by gateway files for the actual computation.
//
+ // The status allows to know the status of the optimization which is given back by Ipopt.
+ // <itemizedlist>
+ // <listitem>status=227 : Optimal Solution Found </listitem>
+ // <listitem>status=228 : Maximum CPU Time exceeded.</listitem>
+ // <listitem>status=229 : Maximum Number of Node Limit Exceeded.</listitem>
+ // <listitem>status=230 : Maximum Number of Iterations Limit Exceeded.</listitem>
+ // </itemizedlist>
+ //
+ // For more details on status see the symphony documentation, go to http://www.coin-or.org/SYMPHONY/man-5.6/
+ //
+ // The output data structure contains detailed informations about the optimization process.
+ // It has type "struct" and contains the following fields.
+ // <itemizedlist>
+ // <listitem>output.iterations: The number of iterations performed during the search</listitem>
+ // </itemizedlist>
+ //
// Examples
// // Objective function
// // Reference: Westerberg, Carl-Henrik, Bengt Bjorklund, and Eskil Hultman. "An application of mixed integer programming in a Swedish steel mill." Interfaces 7, no. 2 (1977): 39-43.
@@ -60,8 +76,8 @@ function [xopt,fopt,status,iter] = symphonymat (varargin)
// ub = [repmat(1,1,4) repmat(%inf,1,4)];
// // Constraint Matrix
// Aeq = [5,3,4,6,1,1,1,1;
- // 5*0.05,3*0.04,4*0.05,6*0.03,0.08,0.07,0.06,0.03;
- // 5*0.03,3*0.03,4*0.04,6*0.04,0.06,0.07,0.08,0.09;]
+ // 5*0.05,3*0.04,4*0.05,6*0.03,0.08,0.07,0.06,0.03;
+ // 5*0.03,3*0.03,4*0.04,6*0.04,0.06,0.07,0.08,0.09;]
// beq = [ 25, 1.25, 1.25]
// intcon = [1 2 3 4];
// // Calling Symphony
@@ -170,6 +186,7 @@ function [xopt,fopt,status,iter] = symphonymat (varargin)
beq = [];
lb = [];
ub = [];
+ options = list();
c = varargin(1)
intcon = varargin(2)
@@ -212,7 +229,7 @@ function [xopt,fopt,status,iter] = symphonymat (varargin)
end
if (size(intcon,2)==0) then
- intcon = 0;
+ intcon = [];
end
if (size(ub,2)==0) then
@@ -309,7 +326,7 @@ function [xopt,fopt,status,iter] = symphonymat (varargin)
//Check if the user gives a matrix instead of a vector
- if ((size(intcon,1)~=1)& (size(intcon,2)~=1)) then
+ if (((size(intcon,1)~=1)& (size(intcon,2)~=1))&(size(intcon,2)~=0)) then
errmsg = msprintf(gettext("%s: intcon should be a vector"), "symphonymat");
error(errmsg);
end
diff --git a/sci_gateway/cpp/.sci_QuadNLP.cpp.swp b/sci_gateway/cpp/.sci_QuadNLP.cpp.swp
deleted file mode 100644
index 764077c..0000000
--- a/sci_gateway/cpp/.sci_QuadNLP.cpp.swp
+++ /dev/null
Binary files differ
diff --git a/sci_gateway/cpp/libFAMOS.so b/sci_gateway/cpp/libFAMOS.so
index ccad147..4ab40e5 100755
--- a/sci_gateway/cpp/libFAMOS.so
+++ b/sci_gateway/cpp/libFAMOS.so
Binary files differ
diff --git a/sci_gateway/cpp/sci_ipopt.cpp b/sci_gateway/cpp/sci_ipopt.cpp
index cbb71df..635003e 100644
--- a/sci_gateway/cpp/sci_ipopt.cpp
+++ b/sci_gateway/cpp/sci_ipopt.cpp
@@ -170,7 +170,7 @@ int sci_solveqp(char *fname)
////////// Manage the output argument //////////
- if (rstatus == 0 | rstatus == 1 | rstatus == 2){
+ if (rstatus >= 0 | rstatus <= 7){
fX = Prob->getX();
ObjVal = Prob->getObjVal();
iteration = Prob->iterCount();
diff --git a/tests/general_tests/lsqlin/lsqlin_infeasible1.sce b/tests/general_tests/lsqlin/lsqlin_infeasible1.sce
index 9509309..414841d 100644
--- a/tests/general_tests/lsqlin/lsqlin_infeasible1.sce
+++ b/tests/general_tests/lsqlin/lsqlin_infeasible1.sce
@@ -17,20 +17,23 @@ beq = [-6 -6 11];
// ineqlin: [0x0 constant]
// output =
//
-// Iterations: 0
+// Iterations: 105
+// ConstrViolation: 0.3333333
// exitflag =
//
// 5
// residual =
//
-// 1.
-// 0.
-// - 1.
+// - 10.333333
+// - 1.021D-13
+// - 12.333333
// resnorm =
//
-// 2.
+// 258.88889
// xopt =
//
-// []
+// 5.6666667
+// 5.6666667
+// 0.
[xopt,resnorm,residual,exitflag,output,lambda] = lsqlin(C,d,[],[],Aeq,beq)
diff --git a/tests/general_tests/lsqlin/lsqlin_logical1.sce b/tests/general_tests/lsqlin/lsqlin_logical1.sce
index 959cc7c..c9930cf 100644
--- a/tests/general_tests/lsqlin/lsqlin_logical1.sce
+++ b/tests/general_tests/lsqlin/lsqlin_logical1.sce
@@ -21,6 +21,7 @@ b = [4
// output =
//
// Iterations: 13
+// ConstrViolation: 0
// exitflag =
//
// 0
diff --git a/tests/general_tests/lsqlin/lsqlin_logical2.sce b/tests/general_tests/lsqlin/lsqlin_logical2.sce
new file mode 100644
index 0000000..33cdc79
--- /dev/null
+++ b/tests/general_tests/lsqlin/lsqlin_logical2.sce
@@ -0,0 +1,53 @@
+// An example with inequality constraints
+C = [1 1 1;
+ 1 1 0;
+ 0 1 1;
+ 1 0 0;
+ 0 0 1]
+d = [89;
+ 67;
+ 53;
+ 35;
+ 20;]
+A = [3 2 1;
+ 2 3 4;
+ 1 2 3];
+b = [191
+ 209
+ 162];
+Aeq = [1 2 1];
+beq = 10;
+
+//Output
+//Optimal Solution Found.
+// lambda =
+//
+// lower: [0,0,0]
+// upper: [0,0,0]
+// eqlin: 73.833333
+// ineqlin: [2.571D-10,2.732D-10,2.571D-10]
+// output =
+//
+// Iterations: 7
+// ConstrViolation: 0
+// exitflag =
+//
+// 0
+// residual =
+//
+// 37.666667
+// 54.75
+// 55.25
+// - 18.583333
+// - 19.083333
+// resnorm =
+//
+// 8178.4167
+// xopt =
+//
+// 53.583333
+// - 41.333333
+// 39.083333
+
+[xopt,resnorm,residual,exitflag,output,lambda] = lsqlin(C,d,A,b,Aeq,beq)
+
diff --git a/tests/general_tests/lsqlin/lsqlin_logical3.sce b/tests/general_tests/lsqlin/lsqlin_logical3.sce
new file mode 100644
index 0000000..f6a44d6
--- /dev/null
+++ b/tests/general_tests/lsqlin/lsqlin_logical3.sce
@@ -0,0 +1,55 @@
+// An example with inequality constraints
+C = [1 1 1;
+ 1 1 0;
+ 0 1 1;
+ 1 0 0;
+ 0 0 1]
+d = [89;
+ 67;
+ 53;
+ 35;
+ 20;]
+A = [3 2 1;
+ 2 3 4;
+ 1 2 3];
+b = [191
+ 209
+ 162];
+Aeq = [1 2 1];
+beq = 10;
+lb = repmat(0.1,3,1);
+ub = repmat(4,3,1);
+
+//Output
+//Optimal Solution Found.
+// lambda =
+//
+// lower: [5.357D-12,2.334D-11,5.356D-12]
+// upper: [78,6.963D-12,49]
+// eqlin: 95
+// ineqlin: [1.206D-13,1.146D-13,1.449D-13]
+// output =
+//
+// Iterations: 8
+// ConstrViolation: 8.000D-08
+// exitflag =
+//
+// 0
+// residual =
+//
+// 80.
+// 62.
+// 48.
+// 31.
+// 16.
+// resnorm =
+//
+// 13765.
+// xopt =
+//
+// 4.
+// 1.0000000
+// 4.
+
+[xopt,resnorm,residual,exitflag,output,lambda] = lsqlin(C,d,A,b,Aeq,beq,lb,ub)
+
diff --git a/tests/general_tests/lsqlin/lsqlin_logical4.sce b/tests/general_tests/lsqlin/lsqlin_logical4.sce
new file mode 100644
index 0000000..231fe02
--- /dev/null
+++ b/tests/general_tests/lsqlin/lsqlin_logical4.sce
@@ -0,0 +1,56 @@
+// An example with inequality constraints
+C = [1 1 1;
+ 1 1 0;
+ 0 1 1;
+ 1 0 0;
+ 0 0 1]
+d = [89;
+ 67;
+ 53;
+ 35;
+ 20;]
+A = [3 2 1;
+ 2 3 4;
+ 1 2 3];
+b = [191
+ 209
+ 162];
+Aeq = [1 2 1];
+beq = 10;
+lb = repmat(0.1,3,1);
+ub = repmat(4,3,1);
+x0 = repmat(0,3,1);
+
+//Output
+//Optimal Solution Found.
+// lambda =
+//
+// lower: [5.357D-12,2.334D-11,5.356D-12]
+// upper: [78,6.963D-12,49]
+// eqlin: 95
+// ineqlin: [1.206D-13,1.146D-13,1.449D-13]
+// output =
+//
+// Iterations: 8
+// ConstrViolation: 8.000D-08
+// exitflag =
+//
+// 0
+// residual =
+//
+// 80.
+// 62.
+// 48.
+// 31.
+// 16.
+// resnorm =
+//
+// 13765.
+// xopt =
+//
+// 4.
+// 1.0000000
+// 4.
+
+[xopt,resnorm,residual,exitflag,output,lambda] = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0)
+
diff --git a/tests/general_tests/lsqlin/lsqlin_logical5.sce b/tests/general_tests/lsqlin/lsqlin_logical5.sce
new file mode 100644
index 0000000..0802609
--- /dev/null
+++ b/tests/general_tests/lsqlin/lsqlin_logical5.sce
@@ -0,0 +1,57 @@
+// An example with inequality constraints
+C = [1 1 1;
+ 1 1 0;
+ 0 1 1;
+ 1 0 0;
+ 0 0 1]
+d = [89;
+ 67;
+ 53;
+ 35;
+ 20;]
+A = [3 2 1;
+ 2 3 4;
+ 1 2 3];
+b = [191
+ 209
+ 162];
+Aeq = [1 2 1];
+beq = 10;
+lb = repmat(0.1,3,1);
+ub = repmat(4,3,1);
+x0 = repmat(0,3,1);
+options = list("MaxIter", 300);
+
+//Output
+//Optimal Solution Found.
+// lambda =
+//
+// lower: [5.357D-12,2.334D-11,5.356D-12]
+// upper: [78,6.963D-12,49]
+// eqlin: 95
+// ineqlin: [1.206D-13,1.146D-13,1.449D-13]
+// output =
+//
+// Iterations: 8
+// ConstrViolation: 8.000D-08
+// exitflag =
+//
+// 0
+// residual =
+//
+// 80.
+// 62.
+// 48.
+// 31.
+// 16.
+// resnorm =
+//
+// 13765.
+// xopt =
+//
+// 4.
+// 1.0000000
+// 4.
+
+[xopt,resnorm,residual,exitflag,output,lambda] = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,options)
+
diff --git a/tests/general_tests/lsqlin/lsqlin_x01.sce b/tests/general_tests/lsqlin/lsqlin_x01.sce
index d014443..c50c359 100644
--- a/tests/general_tests/lsqlin/lsqlin_x01.sce
+++ b/tests/general_tests/lsqlin/lsqlin_x01.sce
@@ -23,6 +23,7 @@ x0 = [0 0 0];
// output =
//
// Iterations: 13
+// ConstrViolation: 0
// exitflag =
//
// 0
diff --git a/tests/general_tests/lsqlin/lsqlin_zeros.sce b/tests/general_tests/lsqlin/lsqlin_zeros.sce
index 2695ff1..309b35f 100644
--- a/tests/general_tests/lsqlin/lsqlin_zeros.sce
+++ b/tests/general_tests/lsqlin/lsqlin_zeros.sce
@@ -14,6 +14,7 @@ b = [0];
// output =
//
// Iterations: 2
+// ConstrViolation: 0
// exitflag =
//
// 0
diff --git a/tests/general_tests/lsqnonneg/lsqnonneg_logical.sce b/tests/general_tests/lsqnonneg/lsqnonneg_logical1.sce
index 5f59f8c..b151d73 100644
--- a/tests/general_tests/lsqnonneg/lsqnonneg_logical.sce
+++ b/tests/general_tests/lsqnonneg/lsqnonneg_logical1.sce
@@ -19,6 +19,7 @@ d = [89;
// output =
//
// Iterations: 7
+// ConstrViolation: 0
// exitflag =
//
// 0
diff --git a/tests/general_tests/lsqnonneg/lsqnonneg_logical2.sce b/tests/general_tests/lsqnonneg/lsqnonneg_logical2.sce
new file mode 100644
index 0000000..f19ab00
--- /dev/null
+++ b/tests/general_tests/lsqnonneg/lsqnonneg_logical2.sce
@@ -0,0 +1,44 @@
+// An example with C and d as input
+C = [1 1 1;
+ 1 1 0;
+ 0 1 1;
+ 1 0 0;
+ 0 0 1]
+d = [89;
+ 67;
+ 53;
+ 35;
+ 20]
+options = list("MaxIter", 300);
+
+//Output
+//Optimal Solution Found.
+// lambda =
+//
+// lower: [5.131D-09,5.546D-09,8.739D-09]
+// upper: [0,0,0]
+// output =
+//
+// Iterations: 7
+// ConstrViolation: 0
+// exitflag =
+//
+// 0
+// residual =
+//
+// 0.75
+// - 0.625
+// - 0.125
+// - 0.125
+// - 0.625
+// resnorm =
+//
+// 1.375
+// xopt =
+//
+// 35.125
+// 32.5
+// 20.625
+
+[xopt,resnorm,residual,exitflag,output,lambda] = lsqnonneg(C,d,options)
+
diff --git a/tests/general_tests/lsqnonneg/lsqnonneg_maxiter.sce b/tests/general_tests/lsqnonneg/lsqnonneg_maxiter.sce
index fa61c73..cbafee5 100644
--- a/tests/general_tests/lsqnonneg/lsqnonneg_maxiter.sce
+++ b/tests/general_tests/lsqnonneg/lsqnonneg_maxiter.sce
@@ -19,6 +19,7 @@ options = list("MaxIter",1)
// output =
//
// Iterations: 1
+// ConstrViolation: 0
// exitflag =
//
// 1
diff --git a/tests/general_tests/lsqnonneg/lsqnonneg_zeros.sce b/tests/general_tests/lsqnonneg/lsqnonneg_zeros.sce
index e454f42..cd1eb06 100644
--- a/tests/general_tests/lsqnonneg/lsqnonneg_zeros.sce
+++ b/tests/general_tests/lsqnonneg/lsqnonneg_zeros.sce
@@ -11,6 +11,7 @@ d = [0];
// output =
//
// Iterations: 3
+// ConstrViolation: 0
// exitflag =
//
// 0
diff --git a/tests/general_tests/qpipopt/qpipopt_infeasible.sci b/tests/general_tests/qpipopt/qpipopt_infeasible.sci
index 49bb233..b01ee0d 100644
--- a/tests/general_tests/qpipopt/qpipopt_infeasible.sci
+++ b/tests/general_tests/qpipopt/qpipopt_infeasible.sci
@@ -19,15 +19,17 @@ lb = -1*ub;
// constraint: [0x0 constant]
// output =
//
-// Iterations: 0
+// Iterations: -1
+// ConstrViolation: 0.3752562
// exitflag =
//
// 5
// fopt =
//
-// 0.
+// - 21.80307
// xopt =
//
-// []
+// 5.6247453
+// 5.6247438
[xopt,fopt,exitflag,output,lamda] = qpipopt(nbVar,nbCon,H,f,lb,ub,A,conLB,conUB)
diff --git a/tests/general_tests/qpipopt/qpipopt_logical_1.sce b/tests/general_tests/qpipopt/qpipopt_logical_1.sce
index 52d5493..54ba0a0 100644
--- a/tests/general_tests/qpipopt/qpipopt_logical_1.sce
+++ b/tests/general_tests/qpipopt/qpipopt_logical_1.sce
@@ -27,7 +27,7 @@ param = list("MaxIter", 300, "CpuTime", 100);
// lambda
//
// Iterations: 13
-//
+// ConstrViolation: 9.968D-09
// output
//
// 0
diff --git a/tests/general_tests/qpipopt/qpipopt_logical_2.sce b/tests/general_tests/qpipopt/qpipopt_logical_2.sce
index 7a75ebe..d00b07b 100644
--- a/tests/general_tests/qpipopt/qpipopt_logical_2.sce
+++ b/tests/general_tests/qpipopt/qpipopt_logical_2.sce
@@ -21,7 +21,7 @@ nbCon = 0;
// lambda
//
// Iterations: 1
-//
+// ConstrViolation: 0
// output
//
// 0
diff --git a/tests/general_tests/qpipopt/qpipopt_maxiter.sce b/tests/general_tests/qpipopt/qpipopt_maxiter.sce
index 5851630..4c35c9e 100644
--- a/tests/general_tests/qpipopt/qpipopt_maxiter.sce
+++ b/tests/general_tests/qpipopt/qpipopt_maxiter.sce
@@ -26,6 +26,7 @@ param = list("MaxIter", 1);
// output =
//
// Iterations: 1
+// ConstrViolation: 1.3770464
// exitflag =
//
// 1
diff --git a/tests/general_tests/qpipopt/qpipopt_x01.sce b/tests/general_tests/qpipopt/qpipopt_x01.sce
index bb37c50..b387a94 100644
--- a/tests/general_tests/qpipopt/qpipopt_x01.sce
+++ b/tests/general_tests/qpipopt/qpipopt_x01.sce
@@ -26,6 +26,7 @@ param = list("MaxIter", 300, "CpuTime", 100);
// output =
//
// Iterations: 13
+// ConstrViolation: 9.968D-09
// exitflag =
//
// 0
diff --git a/tests/general_tests/qpipopt/qpipopt_zeros.sce b/tests/general_tests/qpipopt/qpipopt_zeros.sce
index 9604c4d..993993a 100644
--- a/tests/general_tests/qpipopt/qpipopt_zeros.sce
+++ b/tests/general_tests/qpipopt/qpipopt_zeros.sce
@@ -22,7 +22,7 @@ nbCon = 0;
// lambda
//
// Iterations: 0
-//
+// ConstrViolation: 0
// output
//
// 0
diff --git a/tests/general_tests/qpipoptmat/qpipoptmat_infeasible.sci b/tests/general_tests/qpipoptmat/qpipoptmat_infeasible.sci
index 123f2c9..8964422 100644
--- a/tests/general_tests/qpipoptmat/qpipoptmat_infeasible.sci
+++ b/tests/general_tests/qpipoptmat/qpipoptmat_infeasible.sci
@@ -6,7 +6,6 @@ A = [-1 0; 0, -1; 1 1];
b = [-6 -6 11];
ub = [%inf %inf];
lb = -1*ub;
-[xopt,fopt,exitflag,output,lamda] = qpipoptmat(H,f,A,b,[],[],lb,ub)
//Output
//Converged to a point of local infeasibility.
@@ -18,13 +17,17 @@ lb = -1*ub;
// ineqlin: [0x0 constant]
// output =
//
-// Iterations: 0
+// Iterations: 105
+// ConstrViolation: 0.3752562
// exitflag =
//
// 5
// fopt =
//
-// 0.
+// - 21.80307
// xopt =
//
-// []
+// 5.6247453
+// 5.6247438
+
+[xopt,fopt,exitflag,output,lamda] = qpipoptmat(H,f,A,b,[],[],lb,ub)
diff --git a/tests/general_tests/qpipoptmat/qpipoptmat_logical1.sce b/tests/general_tests/qpipoptmat/qpipoptmat_logical1.sce
index 50ddc6e..e1288c6 100644
--- a/tests/general_tests/qpipoptmat/qpipoptmat_logical1.sce
+++ b/tests/general_tests/qpipoptmat/qpipoptmat_logical1.sce
@@ -1,10 +1,11 @@
// A simple example without constraints
f=[2 -35 -47]';
-H =[5 -2 -1; -2 4 3; -1 3 5];
+H =[5 -2 -1;
+ -2 4 3;
+ -1 3 5];
[xopt,fopt,exitflag,output,lambda]=qpipoptmat(H,f);
-
//Output
//
//Optimal Solution Found.
@@ -17,7 +18,7 @@ H =[5 -2 -1; -2 4 3; -1 3 5];
// lambda
//
// Iterations: 1
-//
+// ConstrViolation: 0
// output
//
// 0
diff --git a/tests/general_tests/qpipoptmat/qpipoptmat_logical2.sce b/tests/general_tests/qpipoptmat/qpipoptmat_logical2.sce
index e316253..137c7bb 100644
--- a/tests/general_tests/qpipoptmat/qpipoptmat_logical2.sce
+++ b/tests/general_tests/qpipoptmat/qpipoptmat_logical2.sce
@@ -13,7 +13,8 @@ ub=[10000; 100; 1.5; 100; 100; 1000];
param = list("MaxIter", 300, "CpuTime",100);
//and minimize 0.5*x'*H*x + f'*x with
f=[1; 2; 3; 4; 5; 6]; H=eye(6,6);
-[xopt,fopt,exitflag,output,lambda]=qpipoptmat(H,f,A,b,Aeq,beq,lb,ub,[],param);
+x0 = repmat(0,6,1);
+[xopt,fopt,exitflag,output,lambda]=qpipoptmat(H,f,A,b,Aeq,beq,lb,ub,x0,param);
//Output
//
@@ -27,7 +28,7 @@ f=[1; 2; 3; 4; 5; 6]; H=eye(6,6);
// lambda
//
// Iterations: 13
-//
+// ConstrViolation: 9.968D-09
// output
//
// 0
diff --git a/tests/general_tests/qpipoptmat/qpipoptmat_logical3.sce b/tests/general_tests/qpipoptmat/qpipoptmat_logical3.sce
new file mode 100644
index 0000000..3565d34
--- /dev/null
+++ b/tests/general_tests/qpipoptmat/qpipoptmat_logical3.sce
@@ -0,0 +1,52 @@
+//Find x in R^6 such that:
+// A simple example with constraints
+
+Aeq= [1,-1,1,0,3,1;
+-1,0,-3,-4,5,6;
+2,5,3,0,1,0];
+beq=[1; 2; 3];
+A= [0,1,0,1,2,-1;
+-1,0,2,1,1,0];
+b = [-1; 2.5];
+lb=[-1000; -10000; 0; -1000; -1000; -1000];
+ub=[10000; 100; 1.5; 100; 100; 1000];
+//and minimize 0.5*x'*H*x + f'*x with
+f=[1; 2; 3; 4; 5; 6]; H=eye(6,6);
+x0 = repmat(0,6,1);
+[xopt,fopt,exitflag,output,lambda]=qpipoptmat(H,f,A,b,Aeq,beq,lb,ub,x0);
+
+//Output
+//
+//Optimal Solution Found.
+//
+// lower: [1x6 constant]
+// upper: [1x6 constant]
+// ineqlin: [0.3091368,1.197D-12]
+// eqlin: [-1.5564027,-0.1698164,-0.7054782]
+//
+// lambda
+//
+// Iterations: 13
+// ConstrViolation: 9.968D-09
+// output
+//
+// 0
+//
+// exitflag
+//
+// - 14.843248
+//
+// fopt
+//
+// 1.7975426
+// - 0.3381487
+// 0.1633880
+// - 4.9884023
+// 0.6054943
+// - 3.1155623
+//
+// xopt
+
+disp("xopt",xopt,"fopt",fopt,"exitflag",exitflag,"output",output,"lambda",lambda)
+
+
diff --git a/tests/general_tests/qpipoptmat/qpipoptmat_logical4.sce b/tests/general_tests/qpipoptmat/qpipoptmat_logical4.sce
new file mode 100644
index 0000000..bad5b8c
--- /dev/null
+++ b/tests/general_tests/qpipoptmat/qpipoptmat_logical4.sce
@@ -0,0 +1,49 @@
+//Find x in R^6 such that:
+// A simple example with constraints
+
+Aeq= [1,-1,1,0,3,1;
+-1,0,-3,-4,5,6;
+2,5,3,0,1,0];
+beq=[1; 2; 3];
+A= [0,1,0,1,2,-1;
+-1,0,2,1,1,0];
+b = [-1; 2.5];
+//and minimize 0.5*x'*H*x + f'*x with
+f=[1; 2; 3; 4; 5; 6]; H=eye(6,6);
+[xopt,fopt,exitflag,output,lambda]=qpipoptmat(H,f,A,b,Aeq,beq);
+
+//Output
+//
+//Optimal Solution Found.
+//
+// lower: [1x6 constant]
+// upper: [1x6 constant]
+// ineqlin: [0.3091368,1.197D-12]
+// eqlin: [-1.5564027,-0.1698164,-0.7054782]
+//
+// lambda
+//
+// Iterations: 13
+// ConstrViolation: 9.968D-09
+// output
+//
+// 0
+//
+// exitflag
+//
+// - 14.843248
+//
+// fopt
+//
+// 1.7975426
+// - 0.3381487
+// 0.1633880
+// - 4.9884023
+// 0.6054943
+// - 3.1155623
+//
+// xopt
+
+disp("xopt",xopt,"fopt",fopt,"exitflag",exitflag,"output",output,"lambda",lambda)
+
+
diff --git a/tests/general_tests/qpipoptmat/qpipoptmat_logical5.sce b/tests/general_tests/qpipoptmat/qpipoptmat_logical5.sce
new file mode 100644
index 0000000..2c78091
--- /dev/null
+++ b/tests/general_tests/qpipoptmat/qpipoptmat_logical5.sce
@@ -0,0 +1,46 @@
+//Find x in R^6 such that:
+// A simple example with constraints
+
+Aeq= [1,-1,1,0,3,1;
+-1,0,-3,-4,5,6;
+2,5,3,0,1,0];
+beq=[1; 2; 3];
+A= [0,1,0,1,2,-1;
+-1,0,2,1,1,0];
+b = [-1; 2.5];
+lb=[-1000; -10000; 0; -1000; -1000; -1000];
+ub=[10000; 100; 1.5; 100; 100; 1000];
+param = list("MaxIter", 300, "CpuTime",100);
+//and minimize 0.5*x'*H*x + f'*x with
+f=[1; 2; 3; 4; 5; 6]; H=eye(6,6);
+x0 = repmat(0,6,1);
+//Output
+//
+//Optimal Solution Found.
+// lambda =
+//
+// lower: [0,0,0,0,0,0]
+// upper: [0,0,0,0,0,0]
+// eqlin: [0x0 constant]
+// ineqlin: [1.232D-12,6.884D-13]
+// output =
+//
+// Iterations: 5
+// ConstrViolation: 0
+// exitflag =
+//
+// 0
+// fopt =
+//
+// - 45.5
+// xopt =
+//
+// - 1.
+// - 2.
+// - 3.
+// - 4.
+// - 5.
+// - 6.
+
+[xopt,fopt,exitflag,output,lambda]=qpipoptmat(H,f,A,b)
+
diff --git a/tests/general_tests/qpipoptmat/qpipoptmat_maxiter.sce b/tests/general_tests/qpipoptmat/qpipoptmat_maxiter.sce
index 5e4b0e5..c49cd78 100644
--- a/tests/general_tests/qpipoptmat/qpipoptmat_maxiter.sce
+++ b/tests/general_tests/qpipoptmat/qpipoptmat_maxiter.sce
@@ -26,6 +26,7 @@ f=[1; 2; 3; 4; 5; 6]; H=eye(6,6);
// output =
//
// Iterations: 1
+// ConstrViolation: 1.3770464
// exitflag =
//
// 1
diff --git a/tests/general_tests/qpipoptmat/qpipoptmat_x01.sce b/tests/general_tests/qpipoptmat/qpipoptmat_x01.sce
index 71a1c6c..f32dcdd 100644
--- a/tests/general_tests/qpipoptmat/qpipoptmat_x01.sce
+++ b/tests/general_tests/qpipoptmat/qpipoptmat_x01.sce
@@ -16,6 +16,32 @@ f=[1; 2; 3; 4; 5; 6]; H=eye(6,6);
x0 = repmat(0,5,1);
// Warning
-//WARNING: qpipopt: Ignoring initial guess of variables as it is not equal to the number of variables
+//WARNING: qpipoptmat: Ignoring initial guess of variables as it is not equal to the number of variables
-[xopt,fopt,exitflag,output,lambda]=qpipoptmat(H,f,A,b,Aeq,beq,lb,ub,x0,param);
+//Optimal Solution Found.
+// lambda =
+//
+// lower: [9.982D-15,1.000D-15,7.345D-11,1.005D-14,9.994D-15,1.003D-14]
+// upper: [1.000D-15,9.966D-14,7.481D-12,9.525D-14,1.006D-13,9.969D-15]
+// eqlin: [-1.5564027,-0.1698164,-0.7054782]
+// ineqlin: [0.3091368,1.197D-12]
+// output =
+//
+// Iterations: 13
+// ConstrViolation: 9.968D-09
+// exitflag =
+//
+// 0
+// fopt =
+//
+// - 14.843248
+// xopt =
+//
+// 1.7975426
+// - 0.3381487
+// 0.1633880
+// - 4.9884023
+// 0.6054943
+// - 3.1155623
+
+[xopt,fopt,exitflag,output,lambda]=qpipoptmat(H,f,A,b,Aeq,beq,lb,ub,x0,param)
diff --git a/tests/general_tests/qpipoptmat/qpipoptmat_zeros.sce b/tests/general_tests/qpipoptmat/qpipoptmat_zeros.sce
index ee9cfc9..1433a8e 100644
--- a/tests/general_tests/qpipoptmat/qpipoptmat_zeros.sce
+++ b/tests/general_tests/qpipoptmat/qpipoptmat_zeros.sce
@@ -15,7 +15,7 @@ H =[0];
// lambda
//
// Iterations: 0
-//
+// ConstrViolation: 0
// output
//
// 0
@@ -31,5 +31,5 @@ H =[0];
// xopt
-[xopt,fopt,exitflag,output,lambda]=qpipoptmat(H,f);
+[xopt,fopt,exitflag,output,lambda]=qpipoptmat(H,f)
diff --git a/tests/general_tests/symphony/symphony_logical1.sce b/tests/general_tests/symphony/symphony_logical1.sce
index 2f63ed6..5c41a9a 100644
--- a/tests/general_tests/symphony/symphony_logical1.sce
+++ b/tests/general_tests/symphony/symphony_logical1.sce
@@ -1,5 +1,6 @@
// A basic case :
+// Reference: Westerberg, Carl-Henrik, Bengt Bjorklund, and Eskil Hultman. "An application of mixed integer programming in a Swedish steel mill." Interfaces 7, no. 2 (1977): 39-43.
// Objective function
c = [350*5,330*3,310*4,280*6,500,450,400,100]';
diff --git a/tests/general_tests/symphonymat/symphonymat_logical2.sce b/tests/general_tests/symphonymat/symphonymat_logical2.sce
index 4f3923f..98a3b70 100644
--- a/tests/general_tests/symphonymat/symphonymat_logical2.sce
+++ b/tests/general_tests/symphonymat/symphonymat_logical2.sce
@@ -2,55 +2,39 @@
// A basic case :
-// Objective function
c = -1*[20,10,15]';
-// Lower Bound of variable
-lb = repmat(0,3,1);
-
-// Upper Bound of variables
-ub = repmat(%inf,3,1);
-
-// Constraint Matrix
A = [3,2,5;
2,1,1;
1,1,3;
5,2,4]
-// Upper Bound of constrains
b = [ 55;26;30;57]
-// Row Matrix for telling symphony that the is integer or not
+
intcon = [];
// Output
//Problem loaded into environment.
-//
+
//Note: There is no limit on time.
-//
+
//An optimal solution has been found.
-//
-// 0.
+// output =
//
// Iterations: 1
-//
-// output
+// status =
//
// 227.
-//
-// status
+// f =
//
// - 268.
-//
-// f
+// x =
//
// 1.8
// 20.8
-// 1.6
-//
-// x
+// 1.6
// Calling Symphony
-[x,f,status,output] = symphonymat(c,intcon,A,b,[],[],lb,ub)
-disp("x",x,"f",f,"status",status,"output",output);
+[x,f,status,output] = symphonymat(c,intcon,A,b)
diff --git a/tests/general_tests/symphonymat/symphonymat_logical3.sce b/tests/general_tests/symphonymat/symphonymat_logical3.sce
new file mode 100644
index 0000000..1b2b60c
--- /dev/null
+++ b/tests/general_tests/symphonymat/symphonymat_logical3.sce
@@ -0,0 +1,43 @@
+// An example with equality constraints and variable bounds
+
+// A basic case :
+
+c = -1*[20,10,15]';
+
+A = [3,2,5;
+ 2,1,1;
+ 1,1,3;
+ 5,2,4]
+
+b = [ 55;26;30;57]
+
+Aeq = [2 3 5]
+
+beq = [5]
+
+intcon = [];
+
+// Output
+//Problem loaded into environment.
+//
+//Note: There is no limit on time.
+//
+//An optimal solution has been found.
+// output =
+//
+// Iterations: 1
+// status =
+//
+// 227.
+// f =
+//
+// - 233.5
+// x =
+//
+// 15.6
+// 0.1
+// - 5.3
+
+// Calling Symphony
+[x,f,status,output] = symphonymat(c,intcon,A,b,Aeq,beq)
+
diff --git a/tests/general_tests/symphonymat/symphonymat_logical4.sce b/tests/general_tests/symphonymat/symphonymat_logical4.sce
new file mode 100644
index 0000000..ccb53a5
--- /dev/null
+++ b/tests/general_tests/symphonymat/symphonymat_logical4.sce
@@ -0,0 +1,46 @@
+// An example with equality constraints and variable bounds
+
+// A basic case :
+
+c = -1*[20,10,15]';
+
+A = [3,2,5;
+ 2,1,1;
+ 1,1,3;
+ 5,2,4]
+
+b = [ 55;26;30;57]
+
+Aeq = [2 3 5]
+
+beq = [5]
+
+intcon = [];
+
+lb = repmat(0,3,1);
+ub = repmat(8,3,1);
+
+// Output
+//Problem loaded into environment.
+
+//Note: There is no limit on time.
+
+//An optimal solution has been found.
+// output =
+//
+// Iterations: 1
+// status =
+//
+// 227.
+// f =
+//
+// - 50.
+// x =
+//
+// 2.5
+// 0.
+// 0.
+
+// Calling Symphony
+[x,f,status,output] = symphonymat(c,intcon,A,b,Aeq,beq,lb,ub)
+
diff --git a/tests/unit_tests/lsqlin.dia.ref b/tests/unit_tests/lsqlin.dia.ref
index 9fbe23f..327598e 100644
--- a/tests/unit_tests/lsqlin.dia.ref
+++ b/tests/unit_tests/lsqlin.dia.ref
@@ -53,30 +53,30 @@ endfunction
//endfunction
//A simple linear least square example
-C = [0.9501 0.7620 0.6153 0.4057
- 0.2311 0.4564 0.7919 0.9354
- 0.6068 0.0185 0.9218 0.9169
- 0.4859 0.8214 0.7382 0.4102
- 0.8912 0.4447 0.1762 0.8936];
- d = [0.0578
- 0.3528
- 0.8131
- 0.0098
- 0.1388];
- A =[0.2027 0.2721 0.7467 0.4659
- 0.1987 0.1988 0.4450 0.4186
- 0.6037 0.0152 0.9318 0.8462];
- b =[0.5251
- 0.2026
- 0.6721];
- Aeq = [3 5 7 9];
- beq = 4;
- lb = -0.1*ones(4,1);
- ub = 2*ones(4,1);
- [xopt,resnorm,residual,exitflag,output,lambda] = lsqlin(C,d,A,b,Aeq,beq,lb,ub)
+C = [1 1 1;
+ 1 1 0;
+ 0 1 1;
+ 1 0 0;
+ 0 0 1]
+d = [89;
+ 67;
+ 53;
+ 35;
+ 20;]
+A = [3 2 1;
+ 2 3 4;
+ 1 2 3];
+b = [191
+ 209
+ 162];
+Aeq = [1 2 1];
+beq = 10;
+lb = repmat(0.1,3,1);
+ub = repmat(4,3,1);
+[xopt,resnorm,residual,exitflag,output,lambda] = lsqlin(C,d,A,b,Aeq,beq,lb,ub)
-assert_close ( xopt , [ -0.1, -0.1, 0.1599089, 0.4089598 ]' , 0.0005 );
-assert_close ( residual , [-0.0352969 -0.0876228 0.3532508 -0.1452700 -0.1212324 ]' , 0.0005 );
-assert_close ( resnorm , [ 0.1695104] , 0.0005 );
+assert_close ( xopt , [ 4 1 4 ]' , 0.0005 );
+assert_close ( residual , [80 62 48 31 16]' , 0.0005 );
+assert_close ( resnorm , [ 13765] , 0.0005 );
assert_checkequal( exitflag , int32(0) );
printf("Test Successful");
diff --git a/tests/unit_tests/lsqlin.tst b/tests/unit_tests/lsqlin.tst
index 9fbe23f..327598e 100644
--- a/tests/unit_tests/lsqlin.tst
+++ b/tests/unit_tests/lsqlin.tst
@@ -53,30 +53,30 @@ endfunction
//endfunction
//A simple linear least square example
-C = [0.9501 0.7620 0.6153 0.4057
- 0.2311 0.4564 0.7919 0.9354
- 0.6068 0.0185 0.9218 0.9169
- 0.4859 0.8214 0.7382 0.4102
- 0.8912 0.4447 0.1762 0.8936];
- d = [0.0578
- 0.3528
- 0.8131
- 0.0098
- 0.1388];
- A =[0.2027 0.2721 0.7467 0.4659
- 0.1987 0.1988 0.4450 0.4186
- 0.6037 0.0152 0.9318 0.8462];
- b =[0.5251
- 0.2026
- 0.6721];
- Aeq = [3 5 7 9];
- beq = 4;
- lb = -0.1*ones(4,1);
- ub = 2*ones(4,1);
- [xopt,resnorm,residual,exitflag,output,lambda] = lsqlin(C,d,A,b,Aeq,beq,lb,ub)
+C = [1 1 1;
+ 1 1 0;
+ 0 1 1;
+ 1 0 0;
+ 0 0 1]
+d = [89;
+ 67;
+ 53;
+ 35;
+ 20;]
+A = [3 2 1;
+ 2 3 4;
+ 1 2 3];
+b = [191
+ 209
+ 162];
+Aeq = [1 2 1];
+beq = 10;
+lb = repmat(0.1,3,1);
+ub = repmat(4,3,1);
+[xopt,resnorm,residual,exitflag,output,lambda] = lsqlin(C,d,A,b,Aeq,beq,lb,ub)
-assert_close ( xopt , [ -0.1, -0.1, 0.1599089, 0.4089598 ]' , 0.0005 );
-assert_close ( residual , [-0.0352969 -0.0876228 0.3532508 -0.1452700 -0.1212324 ]' , 0.0005 );
-assert_close ( resnorm , [ 0.1695104] , 0.0005 );
+assert_close ( xopt , [ 4 1 4 ]' , 0.0005 );
+assert_close ( residual , [80 62 48 31 16]' , 0.0005 );
+assert_close ( resnorm , [ 13765] , 0.0005 );
assert_checkequal( exitflag , int32(0) );
printf("Test Successful");
diff --git a/tests/unit_tests/lsqnonneg.dia.ref b/tests/unit_tests/lsqnonneg.dia.ref
index 2c7c7d2..af929ee 100644
--- a/tests/unit_tests/lsqnonneg.dia.ref
+++ b/tests/unit_tests/lsqnonneg.dia.ref
@@ -53,20 +53,20 @@ endfunction
//endfunction
// A basic lsqnonneg problem
-C = [
- 0.0372 0.2869
- 0.6861 0.7071
- 0.6233 0.6245
- 0.6344 0.6170];
-d = [
- 0.8587
- 0.1781
- 0.0747
- 0.8405];
+C = [1 1 1;
+ 1 1 0;
+ 0 1 1;
+ 1 0 0;
+ 0 0 1]
+d = [89;
+ 67;
+ 53;
+ 35;
+ 20]
[xopt,resnorm,residual,exitflag,output,lambda] = lsqnonneg(C,d)
-assert_close ( xopt , [ 0 0.6929344 ]' , 0.0005 );
-assert_close ( residual , [0.6598971 -0.3118739 -0.3580375 0.4129595]' , 0.0005 );
-assert_close ( resnorm , [ 0.8314560] , 0.0005 );
+assert_close ( xopt , [ 35.125 32.5 20.625 ]' , 0.0005 );
+assert_close ( residual , [0.75 -0.625 -0.125 -0.125 -0.625]' , 0.0005 );
+assert_close ( resnorm , [ 1.375] , 0.0005 );
assert_checkequal( exitflag , int32(0) );
printf("Test Successful");
diff --git a/tests/unit_tests/lsqnonneg.tst b/tests/unit_tests/lsqnonneg.tst
index 2c7c7d2..af929ee 100644
--- a/tests/unit_tests/lsqnonneg.tst
+++ b/tests/unit_tests/lsqnonneg.tst
@@ -53,20 +53,20 @@ endfunction
//endfunction
// A basic lsqnonneg problem
-C = [
- 0.0372 0.2869
- 0.6861 0.7071
- 0.6233 0.6245
- 0.6344 0.6170];
-d = [
- 0.8587
- 0.1781
- 0.0747
- 0.8405];
+C = [1 1 1;
+ 1 1 0;
+ 0 1 1;
+ 1 0 0;
+ 0 0 1]
+d = [89;
+ 67;
+ 53;
+ 35;
+ 20]
[xopt,resnorm,residual,exitflag,output,lambda] = lsqnonneg(C,d)
-assert_close ( xopt , [ 0 0.6929344 ]' , 0.0005 );
-assert_close ( residual , [0.6598971 -0.3118739 -0.3580375 0.4129595]' , 0.0005 );
-assert_close ( resnorm , [ 0.8314560] , 0.0005 );
+assert_close ( xopt , [ 35.125 32.5 20.625 ]' , 0.0005 );
+assert_close ( residual , [0.75 -0.625 -0.125 -0.125 -0.625]' , 0.0005 );
+assert_close ( resnorm , [ 1.375] , 0.0005 );
assert_checkequal( exitflag , int32(0) );
printf("Test Successful");
diff --git a/tests/unit_tests/qpipopt_base.dia.ref b/tests/unit_tests/qpipopt_base.dia.ref
index 0cc59f1..25b440f 100644
--- a/tests/unit_tests/qpipopt_base.dia.ref
+++ b/tests/unit_tests/qpipopt_base.dia.ref
@@ -52,25 +52,25 @@ endfunction
// if flag <> 1 then pause,end
//endfunction
-//Find the value of x that minimize following function
-// f(x) = 0.5*x1^2 + x2^2 - x1*x2 - 2*x1 - 6*x2
-// Subject to:
-// x1 + x2 ≤ 2
-// –x1 + 2x2 ≤ 2
-// 2x1 + x2 ≤ 3
-// 0 ≤ x1, 0 ≤ x2.
-Q = [1 -1; -1 2];
-p = [-2; -6];
-conMatrix = [1 1; -1 2; 2 1];
-conUB = [2; 2; 3];
-conLB = [-%inf; -%inf; -%inf];
-lb = [0; 0];
-ub = [%inf; %inf];
-nbVar = 2;
-nbCon = 3;
-[xopt,fopt,exitflag,output,lambda] = qpipopt(nbVar,nbCon,Q,p,lb,ub,conMatrix,conLB,conUB)
+//Find x in R^6 such that:
+A= [1,-1,1,0,3,1;
+-1,0,-3,-4,5,6;
+2,5,3,0,1,0
+0,1,0,1,2,-1;
+-1,0,2,1,1,0];
+conLB=[1;2;3;-%inf;-%inf];
+conUB = [1;2;3;-1;2.5];
+lb=[-1000;-10000; 0; -1000; -1000; -1000];
+ub=[10000; 100; 1.5; 100; 100; 1000];
+//and minimize 0.5*x'*H*x + f'*x with
+f=[1; 2; 3; 4; 5; 6]; H=eye(6,6);
+nbVar = 6;
+nbCon = 5;
+x0 = repmat(0,nbVar,1);
+param = list("MaxIter", 300, "CpuTime", 100);
+[xopt,fopt,exitflag,output,lambda] = qpipopt(nbVar,nbCon,Q,p,lb,ub,conMatrix,conLB,conUB,x0,param)
-assert_close ( xopt , [0.6666667 1.3333333]' , 1.e-7 );
-assert_close ( fopt , [ - 8.2222223] , 1.e-7 );
+assert_close ( xopt , [1.7975426 -0.3381487 0.1633880 - 4.9884023 0.6054943 -3.1155623]' , 1.e-7 );
+assert_close ( fopt , [ -14.843248] , 1.e-7 );
assert_checkequal( exitflag , int32(0) );
printf("Test Successful");
diff --git a/tests/unit_tests/qpipopt_base.tst b/tests/unit_tests/qpipopt_base.tst
index eee8b91..25b440f 100644
--- a/tests/unit_tests/qpipopt_base.tst
+++ b/tests/unit_tests/qpipopt_base.tst
@@ -52,26 +52,25 @@ endfunction
// if flag <> 1 then pause,end
//endfunction
-//Find the value of x that minimize following function
-// f(x) = 0.5*x1^2 + x2^2 - x1*x2 - 2*x1 - 6*x2
-// Subject to:
-// x1 + x2 ≤ 2
-// –x1 + 2x2 ≤ 2
-// 2x1 + x2 ≤ 3
-// 0 ≤ x1, 0 ≤ x2.
-Q = [1 -1; -1 2];
-p = [-2; -6];
-conMatrix = [1 1; -1 2; 2 1];
-conUB = [2; 2; 3];
-conLB = [-%inf; -%inf; -%inf];
-lb = [0; 0];
-ub = [%inf; %inf];
-nbVar = 2;
-nbCon = 3;
-[xopt,fopt,exitflag,output,lambda] = qpipopt(nbVar,nbCon,Q,p,lb,ub,conMatrix,conLB,conUB)
-
-assert_close ( xopt , [0.6666667 1.3333333]' , 1.e-7 );
-assert_close ( fopt , [ - 8.2222223] , 1.e-7 );
+//Find x in R^6 such that:
+A= [1,-1,1,0,3,1;
+-1,0,-3,-4,5,6;
+2,5,3,0,1,0
+0,1,0,1,2,-1;
+-1,0,2,1,1,0];
+conLB=[1;2;3;-%inf;-%inf];
+conUB = [1;2;3;-1;2.5];
+lb=[-1000;-10000; 0; -1000; -1000; -1000];
+ub=[10000; 100; 1.5; 100; 100; 1000];
+//and minimize 0.5*x'*H*x + f'*x with
+f=[1; 2; 3; 4; 5; 6]; H=eye(6,6);
+nbVar = 6;
+nbCon = 5;
+x0 = repmat(0,nbVar,1);
+param = list("MaxIter", 300, "CpuTime", 100);
+[xopt,fopt,exitflag,output,lambda] = qpipopt(nbVar,nbCon,Q,p,lb,ub,conMatrix,conLB,conUB,x0,param)
+assert_close ( xopt , [1.7975426 -0.3381487 0.1633880 - 4.9884023 0.6054943 -3.1155623]' , 1.e-7 );
+assert_close ( fopt , [ -14.843248] , 1.e-7 );
assert_checkequal( exitflag , int32(0) );
-printf("Test Successfull")
+printf("Test Successful");
diff --git a/tests/unit_tests/qpipoptmat_base.dia.ref b/tests/unit_tests/qpipoptmat_base.dia.ref
index e99255c..fbebe58 100644
--- a/tests/unit_tests/qpipoptmat_base.dia.ref
+++ b/tests/unit_tests/qpipoptmat_base.dia.ref
@@ -52,22 +52,22 @@ endfunction
// if flag <> 1 then pause,end
//endfunction
-//Find the value of x that minimize following function
-// f(x) = 0.5*x1^2 + x2^2 - x1*x2 - 2*x1 - 6*x2
-// Subject to:
-// x1 + x2 ≤ 2
-// –x1 + 2x2 ≤ 2
-// 2x1 + x2 ≤ 3
-// 0 ≤ x1, 0 ≤ x2.
-H = [1 -1; -1 2];
-f = [-2; -6];
-A = [1 1; -1 2; 2 1];
-b = [2; 2; 3];
-lb = [0; 0];
-ub = [%inf; %inf];
-[xopt,fopt,exitflag,output,lambda] = qpipoptmat(H,f,A,b,[],[],lb,ub)
+//Find x in R^6 such that:
+Aeq= [1,-1,1,0,3,1;
+-1,0,-3,-4,5,6;
+2,5,3,0,1,0];
+beq=[1; 2; 3];
+A= [0,1,0,1,2,-1;
+-1,0,2,1,1,0];
+b = [-1; 2.5];
+lb=[-1000; -10000; 0; -1000; -1000; -1000];
+ub=[10000; 100; 1.5; 100; 100; 1000];
+param = list("MaxIter", 300, "CpuTime",100);
+//and minimize 0.5*x'*H*x + f'*x with
+f=[1; 2; 3; 4; 5; 6]; H=eye(6,6);
+[xopt,fopt,exitflag,output,lambda]=qpipoptmat(H,f,A,b,Aeq,beq,lb,ub,[],param);
-assert_close ( xopt , [0.6666667 1.3333333]' , 1.e-7 );
-assert_close ( fopt , [ - 8.2222223] , 1.e-7 );
+assert_close ( xopt , [1.7975426 -0.3381487 0.1633880 - 4.9884023 0.6054943 -3.1155623]' , 1.e-7 );
+assert_close ( fopt , [ -14.843248] , 1.e-7 );
assert_checkequal( exitflag , int32(0) );
printf("Test Successful");
diff --git a/tests/unit_tests/qpipoptmat_base.tst b/tests/unit_tests/qpipoptmat_base.tst
index 482457d..fbebe58 100644
--- a/tests/unit_tests/qpipoptmat_base.tst
+++ b/tests/unit_tests/qpipoptmat_base.tst
@@ -52,23 +52,22 @@ endfunction
// if flag <> 1 then pause,end
//endfunction
-//Find the value of x that minimize following function
-// f(x) = 0.5*x1^2 + x2^2 - x1*x2 - 2*x1 - 6*x2
-// Subject to:
-// x1 + x2 ≤ 2
-// –x1 + 2x2 ≤ 2
-// 2x1 + x2 ≤ 3
-// 0 ≤ x1, 0 ≤ x2.
-H = [1 -1; -1 2];
-f = [-2; -6];
-A = [1 1; -1 2; 2 1];
-b = [2; 2; 3];
-lb = [0; 0];
-ub = [%inf; %inf];
-[xopt,fopt,exitflag,output,lambda] = qpipoptmat(H,f,A,b,[],[],lb,ub)
+//Find x in R^6 such that:
+Aeq= [1,-1,1,0,3,1;
+-1,0,-3,-4,5,6;
+2,5,3,0,1,0];
+beq=[1; 2; 3];
+A= [0,1,0,1,2,-1;
+-1,0,2,1,1,0];
+b = [-1; 2.5];
+lb=[-1000; -10000; 0; -1000; -1000; -1000];
+ub=[10000; 100; 1.5; 100; 100; 1000];
+param = list("MaxIter", 300, "CpuTime",100);
+//and minimize 0.5*x'*H*x + f'*x with
+f=[1; 2; 3; 4; 5; 6]; H=eye(6,6);
+[xopt,fopt,exitflag,output,lambda]=qpipoptmat(H,f,A,b,Aeq,beq,lb,ub,[],param);
-assert_close ( xopt , [0.6666667 1.3333333]' , 1.e-7 );
-assert_close ( fopt , [ - 8.2222223] , 1.e-7 );
+assert_close ( xopt , [1.7975426 -0.3381487 0.1633880 - 4.9884023 0.6054943 -3.1155623]' , 1.e-7 );
+assert_close ( fopt , [ -14.843248] , 1.e-7 );
assert_checkequal( exitflag , int32(0) );
-
-printf("Test Successfull")
+printf("Test Successful");
diff --git a/tests/unit_tests/symphony_base.dia.ref b/tests/unit_tests/symphony_base.dia.ref
index 4b653a8..2e96146 100644
--- a/tests/unit_tests/symphony_base.dia.ref
+++ b/tests/unit_tests/symphony_base.dia.ref
@@ -52,6 +52,7 @@ endfunction
// if flag <> 1 then pause,end
//endfunction
+//Reference: Westerberg, Carl-Henrik, Bengt Bjorklund, and Eskil Hultman. "An application of mixed integer programming in a Swedish steel mill." Interfaces 7, no. 2 (1977): 39-43.
// Objective function
c = [350*5,330*3,310*4,280*6,500,450,400,100]';
diff --git a/tests/unit_tests/symphony_base.tst b/tests/unit_tests/symphony_base.tst
index 31e7547..2e96146 100644
--- a/tests/unit_tests/symphony_base.tst
+++ b/tests/unit_tests/symphony_base.tst
@@ -52,6 +52,7 @@ endfunction
// if flag <> 1 then pause,end
//endfunction
+//Reference: Westerberg, Carl-Henrik, Bengt Bjorklund, and Eskil Hultman. "An application of mixed integer programming in a Swedish steel mill." Interfaces 7, no. 2 (1977): 39-43.
// Objective function
c = [350*5,330*3,310*4,280*6,500,450,400,100]';
@@ -76,9 +77,12 @@ conub = [ 25; 1.25; 1.25]
isInt = [repmat(%t,1,4) repmat(%f,1,4)];
// Calling Symphony
-[x,f,status,output] = symphony(8,3,c,isInt,lb,ub,conMatrix,conlb,conub,1);
+[x,f,iter] = symphony(8,3,c,isInt,lb,ub,conMatrix,conlb,conub,1);
+
+//In Symphony Library for optimal solution status = 227
+status = sym_getStatus();
assert_close ( x , [1 1 0 1 7.25 0 0.25 3.5]' , 1.e-7 );
assert_close ( f , [ 8495] , 1.e-7 );
assert_checkequal( status , 227 );
-
+printf("Test Successful");
diff --git a/tests/unit_tests/symphonymat_base.dia.ref b/tests/unit_tests/symphonymat_base.dia.ref
index d57851a..17a5566 100644
--- a/tests/unit_tests/symphonymat_base.dia.ref
+++ b/tests/unit_tests/symphonymat_base.dia.ref
@@ -52,6 +52,7 @@ endfunction
// if flag <> 1 then pause,end
//endfunction
+// Reference: Westerberg, Carl-Henrik, Bengt Bjorklund, and Eskil Hultman. "An application of mixed integer programming in a Swedish steel mill." Interfaces 7, no. 2 (1977): 39-43.
// Objective function
c = [350*5,330*3,310*4,280*6,500,450,400,100]';
diff --git a/tests/unit_tests/symphonymat_base.tst b/tests/unit_tests/symphonymat_base.tst
index 37b4c3f..95a1fec 100644
--- a/tests/unit_tests/symphonymat_base.tst
+++ b/tests/unit_tests/symphonymat_base.tst
@@ -52,6 +52,7 @@ endfunction
// if flag <> 1 then pause,end
//endfunction
+// Reference: Westerberg, Carl-Henrik, Bengt Bjorklund, and Eskil Hultman. "An application of mixed integer programming in a Swedish steel mill." Interfaces 7, no. 2 (1977): 39-43.
// Objective function
c = [350*5,330*3,310*4,280*6,500,450,400,100]';
diff --git a/thirdparty/linux/include/coin/.IpIpoptCalculatedQuantities.hpp.swp b/thirdparty/linux/include/coin/.IpIpoptCalculatedQuantities.hpp.swp
deleted file mode 100644
index 3e69b30..0000000
--- a/thirdparty/linux/include/coin/.IpIpoptCalculatedQuantities.hpp.swp
+++ /dev/null
Binary files differ