1use crate::{
5 data::{元素, 元素映射, 数据},
6 encoders::编码器,
7 objectives::目标函数,
8 界面,
9};
10pub mod genetic;
11pub mod simulated_annealing;
12
13#[derive(Debug)]
14pub struct 计时器 {
15 pub encode_reset: u128,
16 pub encode_init: u128,
17 pub encode_assembly: u128,
18 pub encode_short: u128,
19 pub encode_duplicate: u128,
20 pub objective_accumulate: u128,
21 pub objective_accept: u128,
22}
23
24pub static mut 全局计时器: 计时器 = 计时器 {
25 encode_reset: 0,
26 encode_init: 0,
27 encode_assembly: 0,
28 encode_short: 0,
29 encode_duplicate: 0,
30 objective_accumulate: 0,
31 objective_accept: 0,
32};
33
34pub struct 优化结果<O: 目标函数> {
35 pub 映射: 元素映射,
36 pub 指标: O::目标值,
37 pub 分数: f64,
38}
39
40pub struct 优化问题<E: 编码器, O: 目标函数, F> {
41 pub 数据: 数据,
42 pub 目标函数: O,
43 pub 编码器: E,
44 pub 操作: F,
45}
46
47impl<E: 编码器, O: 目标函数, F> 优化问题<E, O, F> {
48 pub fn 新建(数据: 数据, 编码器: E, 目标函数: O, 操作: F) -> Self {
49 Self {
50 数据,
51 目标函数,
52 编码器,
53 操作,
54 }
55 }
56
57 pub fn 计算(
58 &mut self, 映射: &元素映射, 变化: &Option<Vec<元素>>
59 ) -> (O::目标值, f64) {
60 let 编码结果 = self.编码器.编码(映射, 变化);
61 self.目标函数.计算(编码结果, 映射)
62 }
63}
64
65pub trait 优化方法<F> {
66 fn 优化<E: 编码器, O: 目标函数>(
67 &self,
68 问题: &mut 优化问题<E, O, F>,
69 界面: &dyn 界面,
70 ) -> 优化结果<O>;
71}