Use better attraction cost function

This commit is contained in:
Mikolaj Wielgus 2026-06-08 00:43:06 +02:00
parent e92ee1d697
commit 2cc4c52a59
2 changed files with 10 additions and 8 deletions

View File

@ -138,10 +138,10 @@ impl MenuBar {
controller.workspace.board_mut(), controller.workspace.board_mut(),
AutoplacerSchedule { AutoplacerSchedule {
initial_temperature: 1000.0, initial_temperature: 1000.0,
temperature_common_ratio: 0.95, temperature_common_ratio: 0.98,
initial_std_dev: 1000.0, initial_std_dev: 1000.0,
std_dev_common_ratio: 0.995, std_dev_common_ratio: 0.995,
max_steps: 200, max_steps: 500,
}, },
); );
} }

View File

@ -11,7 +11,7 @@ use rand_distr::{Distribution, Normal};
use undoredo::{FlushDelta, ResetDelta}; use undoredo::{FlushDelta, ResetDelta};
use crate::{ use crate::{
board::{Board, BoardDelta}, board::Board,
layout::{Layout, compounds::ComponentId}, layout::{Layout, compounds::ComponentId},
orientation::Orientation, orientation::Orientation,
selections::ComponentSelection, selections::ComponentSelection,
@ -36,7 +36,6 @@ pub struct Autoplacer {
components: Vec<ComponentId>, components: Vec<ComponentId>,
schedule: AutoplacerSchedule, schedule: AutoplacerSchedule,
step_counter: u64, step_counter: u64,
origin_delta: BoardDelta, //rng: ThreadRng,
} }
impl Autoplacer { impl Autoplacer {
@ -49,7 +48,6 @@ impl Autoplacer {
components: board.resolve_components(selection).collect(), components: board.resolve_components(selection).collect(),
schedule, schedule,
step_counter: 0, step_counter: 0,
origin_delta: board.flush_delta(),
} }
} }
@ -171,7 +169,7 @@ impl Autoplacer {
crate::profile_function!(); crate::profile_function!();
layout layout
.locate_component_repulsions(component, Orientation::Oblique) .locate_component_repulsions(component, Orientation::Oblique)
.map(|vector| vector.x.abs() + vector.y.abs()) .map(|vector| 1000 * (vector.x.abs() + vector.y.abs()))
.sum() .sum()
} }
@ -179,7 +177,11 @@ impl Autoplacer {
crate::profile_function!(); crate::profile_function!();
layout layout
.component_attractions(component) .component_attractions(component)
.map(|vector| 1.0 / (1.0 + (vector.x.abs() + vector.y.abs()) as f64)) .map(|vector| {
(vector.x.abs().pow(2) as f64 + vector.y.abs().pow(2) as f64)
.sqrt()
.powf(0.5)
})
.sum() .sum()
} }
@ -187,7 +189,7 @@ impl Autoplacer {
crate::profile_function!(); crate::profile_function!();
layout layout
.component_retentions(component) .component_retentions(component)
.map(|vector| 100 * (vector.x.abs() + vector.y.abs())) .map(|vector| 1000 * (vector.x.abs() + vector.y.abs()))
.sum() .sum()
} }