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:
@@ -1,11 +1,11 @@
|
|||||||
SubDir HAIKU_TOP src tests libs linprog ;
|
SubDir HAIKU_TOP src tests libs linprog ;
|
||||||
|
|
||||||
SetSubDirSupportedPlatformsBeOSCompatible ;
|
|
||||||
|
|
||||||
UseLibraryHeaders lp_solve linprog ;
|
UseLibraryHeaders lp_solve linprog ;
|
||||||
|
|
||||||
|
|
||||||
SimpleTest linprog_test :
|
SimpleTest linprog_test :
|
||||||
Program.cpp
|
Program.cpp
|
||||||
:
|
:
|
||||||
be liblpsolve55.so liblinprog.so $(TARGET_LIBSUPC++)
|
be liblpsolve55.so linprog.a $(TARGET_LIBSUPC++) $(TARGET_LIBSTDC++)
|
||||||
;
|
;
|
||||||
|
|||||||
@@ -12,44 +12,101 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
|
using namespace LinearProgramming;
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
PrintVars(LinearSpec* ls)
|
PrintResults(const VariableList& list)
|
||||||
{
|
{
|
||||||
int32 size = ls->Variables()->CountItems();
|
for (int32 i = 0; i < list.CountItems(); i++)
|
||||||
Variable* variable;
|
printf("Variable %i = %f\n", (int)i, list.ItemAt(i)->Value());
|
||||||
for (int i = 0; i < size; i++) {
|
|
||||||
variable = (Variable*)ls->Variables()->ItemAt(i);
|
|
||||||
printf("%f ", variable->Value());
|
|
||||||
}
|
|
||||||
printf("%d\n", ls->Result());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Test1()
|
Test1()
|
||||||
{
|
{
|
||||||
LinearSpec* ls = new LinearSpec();
|
LinearSpec ls;
|
||||||
Variable* x1 = ls->AddVariable();
|
Variable* x1 = ls.AddVariable();
|
||||||
Variable* x2 = ls->AddVariable();
|
Variable* x2 = ls.AddVariable();
|
||||||
|
|
||||||
Constraint* c1 = ls->AddConstraint(1.0, x1, OperatorType(LE), 108);
|
Constraint* c1 = ls.AddConstraint(1.0, x1, OperatorType(kLE), 108);
|
||||||
Constraint* c2 = ls->AddConstraint(1.0, x2, OperatorType(GE), 113);
|
Constraint* c2 = ls.AddConstraint(1.0, x2, OperatorType(kGE), 113);
|
||||||
|
|
||||||
BList* summands = new BList(2);
|
ls.Solve();
|
||||||
summands->AddItem(new Summand(1.0, x1));
|
printf("ls: %s\n", ls.ToString().String());
|
||||||
summands->AddItem(new Summand(1.0, x2));
|
|
||||||
ls->SetObjFunction(summands);
|
|
||||||
|
|
||||||
ls->Solve();
|
ls.RemoveConstraint(c2);
|
||||||
PrintVars(ls);
|
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;
|
Constraint* c5 = ls.AddConstraint(1, x2, -1, x1, kEQ, 10, 5, 5);
|
||||||
ls->Solve();
|
Constraint* c6 = ls.AddConstraint(1, x3, -1, x2, kEQ, 5, 5, 5);
|
||||||
PrintVars(ls);
|
|
||||||
|
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);
|
Constraint* c5 = ls.AddConstraint(1, x2, -1, x1, kEQ, 15, 5, 5);
|
||||||
ls->Solve();
|
Constraint* c6 = ls.AddConstraint(1, x3, -1, x2, kGE, 10, 5000, 5);
|
||||||
PrintVars(ls);
|
|
||||||
|
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()
|
main()
|
||||||
{
|
{
|
||||||
Test1();
|
Test1();
|
||||||
|
SoftConstraints();
|
||||||
|
SoftInequalityConstraints();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user