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 ;
|
||||
|
||||
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++)
|
||||
;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user