18#include <unordered_map>
53 std::vector<std::pair<std::string, std::string>>
sinks;
111 std::vector<Component*> components;
112 std::vector<Net> nets;
116 double spring_constant = 1.0;
117 double repulsion_constant = 1000.0;
118 double damping_factor = 0.9;
119 double time_step = 0.01;
130 bool optimize(
size_t max_iterations = 1000);
136 bool is_converged()
const;
147 std::vector<Component> components;
148 std::vector<Net> nets;
149 std::unordered_map<std::string, size_t> component_index;
156 double current_temperature;
159 std::vector<geometry::Point> best_positions;
162 size_t total_moves = 0;
163 size_t accepted_moves = 0;
164 size_t improved_moves = 0;
169 : placement_area(area), config(config), rng(std::random_device{}()) {}
182 std::vector<geometry::Point>
get_positions()
const {
return best_positions; }
200 double calculate_wirelength_cost()
const;
201 double calculate_timing_cost()
const;
202 double calculate_area_cost()
const;
203 double calculate_power_cost()
const;
204 double calculate_constraint_violations()
const;
206 bool make_random_move();
209 bool accept_probability(
double delta_cost)
const;
212 bool is_position_valid(
size_t comp_idx,
const geometry::Point& pos)
const;
226 std::vector<Net> internal_nets;
232 bool is_optimized =
false;
235 std::vector<IPBlock> ip_blocks;
236 std::vector<Net> inter_block_nets;
243 : chip_area(chip_area), config(config) {}
274 void optimize_ip_block(IPBlock& block);
275 void optimize_block_placement();
276 void global_refinement();
278 std::vector<Net> extract_inter_block_nets()
const;
279 bool components_in_same_block(
const std::string& comp1,
const std::string& comp2)
const;
290 std::vector<Component> components;
291 std::vector<Net> nets;
306 void solve_quadratic_system();
307 void legalize_positions(std::vector<geometry::Point>& positions);
317 std::vector<Component> components;
318 std::vector<Net> nets;
319 std::unordered_map<std::string, double> component_delays;
320 std::unordered_map<std::string, double> net_delays;
337 double calculate_path_delay(
const std::vector<std::string>& path)
const;
338 std::vector<std::string> find_critical_path()
const;
339 void update_net_weights_by_criticality();
361 const OptimizationConfig& config = OptimizationConfig{});
364 const geometry::Rectangle& area);
371 bool timing_critical =
false);
Advanced spatial indexing for ultra-large scale EDA layouts.
2D point with high-precision coordinates and utility methods
Axis-aligned rectangle for bounding boxes and simple EDA components.
void add_component(const Component &comp)
void add_net(const Net &net)
std::vector< geometry::Point > generate_initial_placement()
Generate initial placement using quadratic optimization.
AnalyticalPlacer(const geometry::Rectangle &area)
ForceDirectedPlacer(const geometry::Rectangle &area)
bool optimize(size_t max_iterations=1000)
Run force-directed placement.
void add_component(Component *comp)
void add_net(const Net &net)
void add_component_to_block(const std::string &block_name, const Component &comp)
Add component to an IP block.
void add_net(const Net &net)
Add net (automatically determines if inter-block or intra-block)
CostResult optimize()
Run hierarchical optimization.
std::vector< std::pair< Component, geometry::Point > > get_final_layout() const
Get final layout result.
void create_ip_block(const std::string &name, const geometry::Rectangle &boundary)
Create an IP block.
HierarchicalOptimizer(const geometry::Rectangle &chip_area, const OptimizationConfig &config=OptimizationConfig{})
Layout optimization factory.
static std::unique_ptr< HierarchicalOptimizer > create_hierarchical_optimizer(const geometry::Rectangle &area, const OptimizationConfig &config=OptimizationConfig{})
static std::unique_ptr< SimulatedAnnealingOptimizer > create_sa_optimizer(const geometry::Rectangle &area, const OptimizationConfig &config=OptimizationConfig{})
static std::unique_ptr< ForceDirectedPlacer > create_force_directed_placer(const geometry::Rectangle &area)
static AlgorithmType recommend_algorithm(size_t component_count, size_t net_count, bool timing_critical=false)
Choose optimal algorithm based on problem characteristics.
SimulatedAnnealingOptimizer(const geometry::Rectangle &area, const OptimizationConfig &config=OptimizationConfig{})
std::vector< geometry::Point > get_positions() const
Get optimized component positions.
Statistics get_statistics() const
void add_net(const Net &net)
void add_component(const Component &comp)
CostResult optimize()
Run simulated annealing optimization.
Timing-driven optimization.
void update_timing_criticality()
Calculate critical path and update net criticalities.
CostResult optimize_for_timing()
Timing-driven placement optimization.
void add_component(const Component &comp, double delay)
void add_net(const Net &net)
Main namespace for ZLayout library.
2D Point class for geometric calculations
Axis-aligned rectangle class for bounding boxes and simple components.
Circuit component with connectivity information.
geometry::Rectangle shape
double thermal_coefficient
std::vector< std::string > output_pins
std::vector< std::string > input_pins
Component(const std::string &name, const geometry::Rectangle &shape)
double constraint_violations
Net (electrical connection) between components.
std::vector< std::pair< std::string, std::string > > sinks
Net(const std::string &name)
std::string driver_component
Layout optimization objectives and constraints.
double initial_temperature
size_t max_components_per_block
Get optimization statistics.