Graphviz 12.1.0~dev.20240716.0947
Loading...
Searching...
No Matches
IncVPSC Struct Reference

#include <solve_VPSC.h>

Inheritance diagram for IncVPSC:
[legend]
Collaboration diagram for IncVPSC:
[legend]

Public Member Functions

void satisfy ()
 
void solve ()
 
void moveBlocks ()
 
void splitBlocks ()
 
 IncVPSC (const unsigned n, Variable *vs[], const unsigned m, Constraint *cs[])
 
- Public Member Functions inherited from VPSC
 VPSC (const unsigned n, Variable *vs[], const unsigned m, Constraint *cs[])
 
virtual ~VPSC ()=default
 

Data Fields

unsigned splitCnt
 

Additional Inherited Members

- Protected Member Functions inherited from VPSC
void printBlocks ()
 
- Protected Attributes inherited from VPSC
Blocks bs
 
Constraint ** cs
 
unsigned m
 

Detailed Description

Definition at line 47 of file solve_VPSC.h.

Constructor & Destructor Documentation

◆ IncVPSC()

IncVPSC::IncVPSC ( const unsigned  n,
Variable vs[],
const unsigned  m,
Constraint cs[] 
)

Definition at line 40 of file solve_VPSC.cpp.

References VPSC::cs, and VPSC::m.

Member Function Documentation

◆ moveBlocks()

void IncVPSC::moveBlocks ( )

Definition at line 212 of file solve_VPSC.cpp.

References VPSC::bs, LOGFILE, and RECTANGLE_OVERLAP_LOGGING.

Referenced by splitBlocks().

Here is the caller graph for this function:

◆ satisfy()

void IncVPSC::satisfy ( )
virtual

incremental version of satisfy that allows refinement after blocks are moved.

  • move blocks to new positions
  • repeatedly merge across most violated constraint until no more violated constraints exist

Note: there is a special case to handle when the most violated constraint is between two variables in the same block. Then, we must split the block over an active constraint between the two variables. We choose the constraint with the most negative lagrangian multiplier.

Reimplemented from VPSC.

Definition at line 169 of file solve_VPSC.cpp.

References Constraint::active, Variable::block, VPSC::bs, Blocks::cleanup(), VPSC::cs, Constraint::left, LOGFILE, VPSC::m, Block::merge(), VPSC::printBlocks(), RECTANGLE_OVERLAP_LOGGING, Constraint::right, Constraint::slack(), Block::splitBetween(), and splitBlocks().

Referenced by solve().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ solve()

void IncVPSC::solve ( )
virtual

Calculate the optimal solution. After using satisfy() to produce a feasible solution, refine() examines each block to see if further refinement is possible by splitting the block. This is done repeatedly until no further improvement is possible.

Reimplemented from VPSC.

Definition at line 139 of file solve_VPSC.cpp.

References VPSC::bs, Blocks::cost(), LOGFILE, RECTANGLE_OVERLAP_LOGGING, satisfy(), and splitBlocks().

Here is the call graph for this function:

◆ splitBlocks()

void IncVPSC::splitBlocks ( )

Definition at line 226 of file solve_VPSC.cpp.

References Variable::block, VPSC::bs, Blocks::cleanup(), Block::deleted, Constraint::left, Constraint::lm, LOGFILE, moveBlocks(), Block::posn, RECTANGLE_OVERLAP_LOGGING, Constraint::right, Block::split(), and splitCnt.

Referenced by satisfy(), and solve().

Here is the call graph for this function:
Here is the caller graph for this function:

Field Documentation

◆ splitCnt

unsigned IncVPSC::splitCnt

Definition at line 49 of file solve_VPSC.h.

Referenced by splitBlocks().


The documentation for this struct was generated from the following files: