- Hide constraint header in Area file.
- Start to replace BList with BObjectList. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38741 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
0401a9c712
commit
601eded950
@ -18,11 +18,14 @@
|
||||
#include "Area.h"
|
||||
#include "Row.h"
|
||||
#include "Column.h"
|
||||
#include "Constraint.h"
|
||||
|
||||
|
||||
class Constraint;
|
||||
|
||||
|
||||
namespace BALM {
|
||||
|
||||
|
||||
class BALMLayout;
|
||||
|
||||
/**
|
||||
|
@ -9,7 +9,7 @@
|
||||
#include <math.h>
|
||||
|
||||
#include <File.h>
|
||||
#include <List.h>
|
||||
#include <ObjectList.h>
|
||||
#include <String.h>
|
||||
#include <SupportDefs.h>
|
||||
|
||||
@ -31,8 +31,8 @@ class Constraint {
|
||||
public:
|
||||
int32 Index() const;
|
||||
|
||||
BList* LeftSide();
|
||||
void SetLeftSide(BList* summands);
|
||||
SummandList* LeftSide();
|
||||
void SetLeftSide(SummandList* summands);
|
||||
void UpdateLeftSide();
|
||||
void SetLeftSide(double coeff1, Variable* var1);
|
||||
void SetLeftSide(double coeff1, Variable* var1,
|
||||
@ -71,13 +71,14 @@ public:
|
||||
~Constraint();
|
||||
|
||||
protected:
|
||||
Constraint(LinearSpec* ls, BList* summands,
|
||||
OperatorType op, double rightSide,
|
||||
double penaltyNeg, double penaltyPos);
|
||||
Constraint(LinearSpec* ls,
|
||||
SummandList* summands, OperatorType op,
|
||||
double rightSide, double penaltyNeg,
|
||||
double penaltyPos);
|
||||
|
||||
private:
|
||||
LinearSpec* fLS;
|
||||
BList* fLeftSide;
|
||||
SummandList* fLeftSide;
|
||||
OperatorType fOp;
|
||||
double fRightSide;
|
||||
Summand* fDNegObjSummand;
|
||||
@ -91,6 +92,10 @@ public:
|
||||
|
||||
};
|
||||
|
||||
|
||||
typedef BObjectList<Constraint> ConstraintList;
|
||||
|
||||
|
||||
} // namespace LinearProgramming
|
||||
|
||||
using LinearProgramming::Constraint;
|
||||
|
@ -43,7 +43,7 @@ public:
|
||||
|
||||
Variable* AddVariable();
|
||||
|
||||
Constraint* AddConstraint(BList* summands,
|
||||
Constraint* AddConstraint(SummandList* summands,
|
||||
OperatorType op, double rightSide);
|
||||
Constraint* AddConstraint(double coeff1, Variable* var1,
|
||||
OperatorType op, double rightSide);
|
||||
@ -60,7 +60,7 @@ public:
|
||||
double coeff4, Variable* var4,
|
||||
OperatorType op, double rightSide);
|
||||
|
||||
Constraint* AddConstraint(BList* summands,
|
||||
Constraint* AddConstraint(SummandList* summands,
|
||||
OperatorType op, double rightSide,
|
||||
double penaltyNeg, double penaltyPos);
|
||||
Constraint* AddConstraint(double coeff1, Variable* var1,
|
||||
@ -85,8 +85,8 @@ public:
|
||||
PenaltyFunction* AddPenaltyFunction(Variable* var, BList* xs,
|
||||
BList* gs);
|
||||
|
||||
BList* ObjFunction();
|
||||
void SetObjFunction(BList* summands);
|
||||
SummandList* ObjFunction();
|
||||
void SetObjFunction(SummandList* summands);
|
||||
void UpdateObjFunction();
|
||||
|
||||
ResultType Presolve();
|
||||
@ -115,7 +115,7 @@ private:
|
||||
lprec* fLpPresolved;
|
||||
OptimizationType fOptimization;
|
||||
lprec* fLP;
|
||||
BList* fObjFunction;
|
||||
SummandList* fObjFunction;
|
||||
BList fVariables;
|
||||
BList fConstraints;
|
||||
ResultType fResult;
|
||||
|
@ -6,6 +6,8 @@
|
||||
#ifndef SUMMAND_H
|
||||
#define SUMMAND_H
|
||||
|
||||
#include <ObjectList.h>
|
||||
|
||||
|
||||
namespace LinearProgramming {
|
||||
|
||||
@ -31,9 +33,13 @@ private:
|
||||
bool fUsedInPenaltyFunction; //not set yet
|
||||
};
|
||||
|
||||
typedef BObjectList<Summand> SummandList;
|
||||
|
||||
} // namespace LinearProgramming
|
||||
|
||||
using LinearProgramming::Summand;
|
||||
using LinearProgramming::SummandList;
|
||||
|
||||
|
||||
#endif // OBJ_FUNCTION_SUMMAND_H
|
||||
|
||||
|
@ -4,22 +4,24 @@
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
|
||||
#include <algorithm> // for max
|
||||
|
||||
#include <Button.h>
|
||||
#include <CheckBox.h>
|
||||
#include <PictureButton.h>
|
||||
#include <RadioButton.h>
|
||||
#include <StatusBar.h>
|
||||
#include <StringView.h>
|
||||
|
||||
#include "Area.h"
|
||||
#include "Column.h"
|
||||
#include "BALMLayout.h"
|
||||
#include "Column.h"
|
||||
#include "Constraint.h"
|
||||
#include "OperatorType.h"
|
||||
#include "Row.h"
|
||||
#include "XTab.h"
|
||||
#include "YTab.h"
|
||||
|
||||
#include <Button.h>
|
||||
#include <RadioButton.h>
|
||||
#include <CheckBox.h>
|
||||
#include <StringView.h>
|
||||
#include <PictureButton.h>
|
||||
#include <StatusBar.h>
|
||||
|
||||
#include <algorithm> // for max
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
@ -602,16 +602,16 @@ BALMLayout::SetPerformancePath(char* path)
|
||||
BSize
|
||||
BALMLayout::CalculateMinSize()
|
||||
{
|
||||
BList* oldObjFunction = ObjFunction();
|
||||
BList* newObjFunction = new BList(2);
|
||||
SummandList* oldObjFunction = ObjFunction();
|
||||
SummandList* newObjFunction = new SummandList(2);
|
||||
newObjFunction->AddItem(new Summand(1.0, fRight));
|
||||
newObjFunction->AddItem(new Summand(1.0, fBottom));
|
||||
SetObjFunction(newObjFunction);
|
||||
SolveLayout();
|
||||
SetObjFunction(oldObjFunction);
|
||||
UpdateObjFunction();
|
||||
delete (Summand*)newObjFunction->ItemAt(0);
|
||||
delete (Summand*)newObjFunction->ItemAt(1);
|
||||
delete newObjFunction->ItemAt(0);
|
||||
delete newObjFunction->ItemAt(1);
|
||||
delete newObjFunction;
|
||||
|
||||
if (Result() == UNBOUNDED)
|
||||
@ -631,16 +631,16 @@ BALMLayout::CalculateMinSize()
|
||||
BSize
|
||||
BALMLayout::CalculateMaxSize()
|
||||
{
|
||||
BList* oldObjFunction = ObjFunction();
|
||||
BList* newObjFunction = new BList(2);
|
||||
SummandList* oldObjFunction = ObjFunction();
|
||||
SummandList* newObjFunction = new SummandList(2);
|
||||
newObjFunction->AddItem(new Summand(-1.0, fRight));
|
||||
newObjFunction->AddItem(new Summand(-1.0, fBottom));
|
||||
SetObjFunction(newObjFunction);
|
||||
SolveLayout();
|
||||
SetObjFunction(oldObjFunction);
|
||||
UpdateObjFunction();
|
||||
delete (Summand*)newObjFunction->ItemAt(0);
|
||||
delete (Summand*)newObjFunction->ItemAt(1);
|
||||
delete newObjFunction->ItemAt(0);
|
||||
delete newObjFunction->ItemAt(1);
|
||||
delete newObjFunction;
|
||||
|
||||
if (Result() == UNBOUNDED)
|
||||
|
@ -43,7 +43,7 @@ Constraint::Index() const
|
||||
*
|
||||
* @return pointer to a BList containing the summands on the left side of the constraint
|
||||
*/
|
||||
BList*
|
||||
SummandList*
|
||||
Constraint::LeftSide()
|
||||
{
|
||||
return fLeftSide;
|
||||
@ -57,7 +57,7 @@ Constraint::LeftSide()
|
||||
* @param summands a BList containing the Summand objects that make up the new left side
|
||||
*/
|
||||
void
|
||||
Constraint::SetLeftSide(BList* summands)
|
||||
Constraint::SetLeftSide(SummandList* summands)
|
||||
{
|
||||
if (!fIsValid)
|
||||
return;
|
||||
@ -77,7 +77,7 @@ Constraint::UpdateLeftSide()
|
||||
int varIndexes[fLeftSide->CountItems() + 2];
|
||||
int32 i;
|
||||
for (i = 0; i < fLeftSide->CountItems(); i++) {
|
||||
Summand* s = (Summand*)fLeftSide->ItemAt(i);
|
||||
Summand* s = fLeftSide->ItemAt(i);
|
||||
coeffs[i] = s->Coeff();
|
||||
varIndexes[i] = s->Var()->Index();
|
||||
}
|
||||
@ -109,7 +109,7 @@ Constraint::SetLeftSide(double coeff1, Variable* var1)
|
||||
return;
|
||||
|
||||
for (int i=0; i<fLeftSide->CountItems(); i++)
|
||||
delete (Summand*)fLeftSide->ItemAt(i);
|
||||
delete fLeftSide->ItemAt(i);
|
||||
fLeftSide->MakeEmpty();
|
||||
fLeftSide->AddItem(new Summand(coeff1, var1));
|
||||
UpdateLeftSide();
|
||||
@ -124,7 +124,7 @@ Constraint::SetLeftSide(double coeff1, Variable* var1,
|
||||
return;
|
||||
|
||||
for (int i=0; i<fLeftSide->CountItems(); i++)
|
||||
delete (Summand*)fLeftSide->ItemAt(i);
|
||||
delete fLeftSide->ItemAt(i);
|
||||
fLeftSide->MakeEmpty();
|
||||
fLeftSide->AddItem(new Summand(coeff1, var1));
|
||||
fLeftSide->AddItem(new Summand(coeff2, var2));
|
||||
@ -141,7 +141,7 @@ Constraint::SetLeftSide(double coeff1, Variable* var1,
|
||||
return;
|
||||
|
||||
for (int i=0; i<fLeftSide->CountItems(); i++)
|
||||
delete (Summand*)fLeftSide->ItemAt(i);
|
||||
delete fLeftSide->ItemAt(i);
|
||||
fLeftSide->MakeEmpty();
|
||||
fLeftSide->AddItem(new Summand(coeff1, var1));
|
||||
fLeftSide->AddItem(new Summand(coeff2, var2));
|
||||
@ -160,7 +160,7 @@ Constraint::SetLeftSide(double coeff1, Variable* var1,
|
||||
return;
|
||||
|
||||
for (int i=0; i<fLeftSide->CountItems(); i++)
|
||||
delete (Summand*)fLeftSide->ItemAt(i);
|
||||
delete fLeftSide->ItemAt(i);
|
||||
fLeftSide->MakeEmpty();
|
||||
fLeftSide->AddItem(new Summand(coeff1, var1));
|
||||
fLeftSide->AddItem(new Summand(coeff2, var2));
|
||||
@ -482,7 +482,7 @@ Constraint::GetString(BString& string) const
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
Constraint::Constraint(LinearSpec* ls, BList* summands, OperatorType op,
|
||||
Constraint::Constraint(LinearSpec* ls, SummandList* summands, OperatorType op,
|
||||
double rightSide, double penaltyNeg, double penaltyPos)
|
||||
:
|
||||
fLS(ls),
|
||||
@ -495,7 +495,7 @@ Constraint::Constraint(LinearSpec* ls, BList* summands, OperatorType op,
|
||||
int varIndexes[summands->CountItems() + 2];
|
||||
int32 i;
|
||||
for (i = 0; i < summands->CountItems(); i++) {
|
||||
Summand* s = (Summand*)summands->ItemAt(i);
|
||||
Summand* s = summands->ItemAt(i);
|
||||
coeffs[i] = s->Coeff();
|
||||
varIndexes[i] = s->Var()->Index();
|
||||
}
|
||||
|
@ -16,7 +16,7 @@ LinearSpec::LinearSpec()
|
||||
fCountColumns(0),
|
||||
fLpPresolved(NULL),
|
||||
fOptimization(MINIMIZE),
|
||||
fObjFunction(new BList()),
|
||||
fObjFunction(new SummandList()),
|
||||
fResult(ERROR),
|
||||
fObjectiveValue(NAN),
|
||||
fSolvingTime(NAN)
|
||||
@ -70,7 +70,8 @@ LinearSpec::AddVariable()
|
||||
* @return the new constraint
|
||||
*/
|
||||
Constraint*
|
||||
LinearSpec::AddConstraint(BList* summands, OperatorType op, double rightSide)
|
||||
LinearSpec::AddConstraint(SummandList* summands, OperatorType op,
|
||||
double rightSide)
|
||||
{
|
||||
Constraint* c = new Constraint(this, summands, op, rightSide,
|
||||
INFINITY, INFINITY);
|
||||
@ -92,7 +93,7 @@ Constraint*
|
||||
LinearSpec::AddConstraint(double coeff1, Variable* var1,
|
||||
OperatorType op, double rightSide)
|
||||
{
|
||||
BList* summands = new BList(1);
|
||||
SummandList* summands = new SummandList(1);
|
||||
summands->AddItem(new Summand(coeff1, var1));
|
||||
Constraint* c = new Constraint(this, summands, op, rightSide,
|
||||
INFINITY, INFINITY);
|
||||
@ -116,7 +117,7 @@ Constraint*
|
||||
LinearSpec::AddConstraint(double coeff1, Variable* var1,
|
||||
double coeff2, Variable* var2, OperatorType op, double rightSide)
|
||||
{
|
||||
BList* summands = new BList(2);
|
||||
SummandList* summands = new SummandList(2);
|
||||
summands->AddItem(new Summand(coeff1, var1));
|
||||
summands->AddItem(new Summand(coeff2, var2));
|
||||
Constraint* c = new Constraint(this, summands, op, rightSide,
|
||||
@ -144,7 +145,7 @@ LinearSpec::AddConstraint(double coeff1, Variable* var1,
|
||||
double coeff2, Variable* var2, double coeff3, Variable* var3,
|
||||
OperatorType op, double rightSide)
|
||||
{
|
||||
BList* summands = new BList(3);
|
||||
SummandList* summands = new SummandList(3);
|
||||
summands->AddItem(new Summand(coeff1, var1));
|
||||
summands->AddItem(new Summand(coeff2, var2));
|
||||
summands->AddItem(new Summand(coeff3, var3));
|
||||
@ -175,7 +176,7 @@ LinearSpec::AddConstraint(double coeff1, Variable* var1,
|
||||
double coeff2, Variable* var2, double coeff3, Variable* var3,
|
||||
double coeff4, Variable* var4, OperatorType op, double rightSide)
|
||||
{
|
||||
BList* summands = new BList(3);
|
||||
SummandList* summands = new SummandList(3);
|
||||
summands->AddItem(new Summand(coeff1, var1));
|
||||
summands->AddItem(new Summand(coeff2, var2));
|
||||
summands->AddItem(new Summand(coeff3, var3));
|
||||
@ -199,7 +200,7 @@ LinearSpec::AddConstraint(double coeff1, Variable* var1,
|
||||
* @param penaltyPos the coefficient penalizing positive deviations from the exact solution
|
||||
*/
|
||||
Constraint*
|
||||
LinearSpec::AddConstraint(BList* summands, OperatorType op,
|
||||
LinearSpec::AddConstraint(SummandList* summands, OperatorType op,
|
||||
double rightSide, double penaltyNeg, double penaltyPos)
|
||||
{
|
||||
Constraint* c = new Constraint(this, summands, op, rightSide,
|
||||
@ -223,7 +224,7 @@ Constraint*
|
||||
LinearSpec::AddConstraint(double coeff1, Variable* var1,
|
||||
OperatorType op, double rightSide, double penaltyNeg, double penaltyPos)
|
||||
{
|
||||
BList* summands = new BList(1);
|
||||
SummandList* summands = new SummandList(1);
|
||||
summands->AddItem(new Summand(coeff1, var1));
|
||||
Constraint* c = new Constraint(this, summands, op, rightSide,
|
||||
penaltyNeg, penaltyPos);
|
||||
@ -249,7 +250,7 @@ LinearSpec::AddConstraint(double coeff1, Variable* var1,
|
||||
double coeff2, Variable* var2, OperatorType op, double rightSide,
|
||||
double penaltyNeg, double penaltyPos)
|
||||
{
|
||||
BList* summands = new BList(2);
|
||||
SummandList* summands = new SummandList(2);
|
||||
summands->AddItem(new Summand(coeff1, var1));
|
||||
summands->AddItem(new Summand(coeff2, var2));
|
||||
Constraint* c = new Constraint(this, summands, op, rightSide,
|
||||
@ -278,7 +279,7 @@ LinearSpec::AddConstraint(double coeff1, Variable* var1,
|
||||
double coeff2, Variable* var2, double coeff3, Variable* var3,
|
||||
OperatorType op, double rightSide, double penaltyNeg, double penaltyPos)
|
||||
{
|
||||
BList* summands = new BList(2);
|
||||
SummandList* summands = new SummandList(2);
|
||||
summands->AddItem(new Summand(coeff1, var1));
|
||||
summands->AddItem(new Summand(coeff2, var2));
|
||||
summands->AddItem(new Summand(coeff3, var3));
|
||||
@ -311,7 +312,7 @@ LinearSpec::AddConstraint(double coeff1, Variable* var1,
|
||||
double coeff4, Variable* var4, OperatorType op, double rightSide,
|
||||
double penaltyNeg, double penaltyPos)
|
||||
{
|
||||
BList* summands = new BList(2);
|
||||
SummandList* summands = new SummandList(2);
|
||||
summands->AddItem(new Summand(coeff1, var1));
|
||||
summands->AddItem(new Summand(coeff2, var2));
|
||||
summands->AddItem(new Summand(coeff3, var3));
|
||||
@ -343,7 +344,7 @@ LinearSpec::AddPenaltyFunction(Variable* var, BList* xs, BList* gs)
|
||||
*
|
||||
* @return BList containing the objective function's summands
|
||||
*/
|
||||
BList*
|
||||
SummandList*
|
||||
LinearSpec::ObjFunction()
|
||||
{
|
||||
return fObjFunction;
|
||||
@ -357,7 +358,7 @@ LinearSpec::ObjFunction()
|
||||
* @param summands BList containing the objective function's summands
|
||||
*/
|
||||
void
|
||||
LinearSpec::SetObjFunction(BList* summands)
|
||||
LinearSpec::SetObjFunction(SummandList* summands)
|
||||
{
|
||||
fObjFunction = summands;
|
||||
UpdateObjFunction();
|
||||
|
@ -298,9 +298,9 @@ Variable::Invalidate()
|
||||
if (!constraint->IsValid())
|
||||
continue;
|
||||
|
||||
BList* summands = constraint->LeftSide();
|
||||
SummandList* summands = constraint->LeftSide();
|
||||
for (int j = 0; j < summands->CountItems(); j++) {
|
||||
Summand* summand = static_cast<Summand*>(summands->ItemAt(j));
|
||||
Summand* summand = summands->ItemAt(j);
|
||||
if (summand->Var() == this) {
|
||||
markedForInvalidation.AddItem(constraint);
|
||||
break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user