27 const std::vector<double>* anchor_w =
nullptr);
33 std::vector<std::string>
log;
40 std::vector<Placement>* trace =
nullptr);
Placement legality (design doc 04 §3 D/E): exact integer tests of courtyards, through-hole obstacles,...
SpreadStats spread(const Problem &p, Placement &pl, int max_iterations=40, double target_overflow=0.10, std::vector< Placement > *trace=nullptr)
(B) SimPL loop starting from a quadratic placement pl; on return pl holds the spread (upper-bound) pl...
std::array< double, 2 > utilisation(const Problem &p)
Movable courtyard area (incl. clearance) / free board area, per side.
std::vector< std::vector< int > > part_nets(const Problem &p)
Nets touching each part (sorted, unique).
int optimise_rotations(const Problem &p, Placement &pl, int max_passes=20)
(C) Rotation coordinate descent over the movable parts (HPWL of each part's nets).
void quadratic_place(const Problem &p, Placement &pl, int relinearise, const std::vector< Point > *anchor=nullptr, const std::vector< double > *anchor_w=nullptr)
(A) Solves the B2B quadratic program for the movable parts (rotations taken from pl),...
double density_overflow(const Problem &p, const Placement &pl)
Bin density overflow of a placement: Σ max(0, demand − capacity) / Σ demand over a bin grid per side.
std::int64_t hpwl_upper
weighted HPWL of the last lower/upper placements
std::vector< std::string > log
double overflow_end
bin density overflow of the quadratic placement