Fix linprog tests and add some more smaller test cases.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42423 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Clemens Zeidler
2011-07-14 07:19:30 +00:00
parent 1245d875a3
commit 0a24883020
2 changed files with 86 additions and 27 deletions
+2 -2
View File
@@ -1,11 +1,11 @@
SubDir HAIKU_TOP src tests libs linprog ;
SetSubDirSupportedPlatformsBeOSCompatible ;
UseLibraryHeaders lp_solve linprog ;
SimpleTest linprog_test :
Program.cpp
:
be liblpsolve55.so liblinprog.so $(TARGET_LIBSUPC++)
be liblpsolve55.so linprog.a $(TARGET_LIBSUPC++) $(TARGET_LIBSTDC++)
;
+84 -25
View File
@@ -12,44 +12,101 @@
#include <stdio.h>
using namespace LinearProgramming;
void
PrintVars(LinearSpec* ls)
PrintResults(const VariableList& list)
{
int32 size = ls->Variables()->CountItems();
Variable* variable;
for (int i = 0; i < size; i++) {
variable = (Variable*)ls->Variables()->ItemAt(i);
printf("%f ", variable->Value());
}
printf("%d\n", ls->Result());
for (int32 i = 0; i < list.CountItems(); i++)
printf("Variable %i = %f\n", (int)i, list.ItemAt(i)->Value());
}
void
Test1()
{
LinearSpec* ls = new LinearSpec();
Variable* x1 = ls->AddVariable();
Variable* x2 = ls->AddVariable();
LinearSpec ls;
Variable* x1 = ls.AddVariable();
Variable* x2 = ls.AddVariable();
Constraint* c1 = ls->AddConstraint(1.0, x1, OperatorType(LE), 108);
Constraint* c2 = ls->AddConstraint(1.0, x2, OperatorType(GE), 113);
Constraint* c1 = ls.AddConstraint(1.0, x1, OperatorType(kLE), 108);
Constraint* c2 = ls.AddConstraint(1.0, x2, OperatorType(kGE), 113);
BList* summands = new BList(2);
summands->AddItem(new Summand(1.0, x1));
summands->AddItem(new Summand(1.0, x2));
ls->SetObjFunction(summands);
ls.Solve();
printf("ls: %s\n", ls.ToString().String());
ls->Solve();
PrintVars(ls);
ls.RemoveConstraint(c2);
ls.Solve();
printf("ls: %s\n", ls.ToString().String());
c2 = ls.AddConstraint(1.0, x2, OperatorType(kGE), 113);
ls.Solve();
printf("ls: %s\n", ls.ToString().String());
}
void
SoftConstraints()
{
printf("SoftConstraints\n\n");
LinearSpec ls;
Variable* x1 = ls.AddVariable();
x1->SetLabel("label_x1");
Variable* x2 = ls.AddVariable();
x2->SetLabel("label_x2");
Variable* x3 = ls.AddVariable();
x3->SetLabel("label_x3");
Constraint* c1 = ls.AddConstraint(1, x1, kEQ, 0);
Constraint* c2 = ls.AddConstraint(1, x1, -1, x2, kLE, 0);
Constraint* c3 = ls.AddConstraint(1, x2, -1, x3, kLE, 0);
Constraint* c4 = ls.AddConstraint(1, x3, -1, x1, kEQ, 20);
delete c2;
ls->Solve();
PrintVars(ls);
Constraint* c5 = ls.AddConstraint(1, x2, -1, x1, kEQ, 10, 5, 5);
Constraint* c6 = ls.AddConstraint(1, x3, -1, x2, kEQ, 5, 5, 5);
ls.Solve();
printf("ls: %s\n", ls.ToString().String());
PrintResults(ls.AllVariables());
ls.RemoveConstraint(c6);
ls.Solve();
printf("ls: %s\n", ls.ToString().String());
PrintResults(ls.UsedVariables());
}
void
SoftInequalityConstraints()
{
printf("SoftInequalityConstraints\n\n");
LinearSpec ls;
Variable* x1 = ls.AddVariable();
x1->SetLabel("label_x1");
Variable* x2 = ls.AddVariable();
x2->SetLabel("label_x2");
Variable* x3 = ls.AddVariable();
x3->SetLabel("label_x3");
Constraint* c1 = ls.AddConstraint(1, x1, kEQ, 0);
Constraint* c2 = ls.AddConstraint(1, x1, -1, x2, kLE, 0);
Constraint* c3 = ls.AddConstraint(1, x2, -1, x3, kLE, 0);
Constraint* c4 = ls.AddConstraint(1, x3, -1, x1, kEQ, 20);
c2 = ls->AddConstraint(1.0, x2, OperatorType(GE), 113);
ls->Solve();
PrintVars(ls);
Constraint* c5 = ls.AddConstraint(1, x2, -1, x1, kEQ, 15, 5, 5);
Constraint* c6 = ls.AddConstraint(1, x3, -1, x2, kGE, 10, 5000, 5);
ls.Solve();
printf("ls: %s\n", ls.ToString().String());
PrintResults(ls.AllVariables());
ls.RemoveConstraint(c6);
ls.Solve();
printf("ls: %s\n", ls.ToString().String());
PrintResults(ls.UsedVariables());
}
@@ -57,5 +114,7 @@ int
main()
{
Test1();
SoftConstraints();
SoftInequalityConstraints();
}