chai/interfaces/
server.rs1use super::*;
2use crate::{
3 config::{目标配置, 优化配置, 求解器配置},
4 contexts::default::默认上下文,
5 encoders::default::默认编码器,
6 objectives::{default::默认目标函数, metric::默认指标, 目标函数},
7 operators::default::默认操作,
8 码表项, 错误,
9};
10use console_error_panic_hook::set_once;
11
12#[derive(Default)]
14pub struct WebApi {
15 参数: 默认输入,
16 回调: Option<Box<dyn Fn(&消息) + Send + Sync>>,
17}
18
19impl WebApi {
20 pub fn new() -> Self {
22 set_once();
23 let 参数 = 默认输入::default();
24 Self {
25 参数, 回调: None
26 }
27 }
28
29 pub fn set_callback<F>(&mut self, callback: F)
31 where
32 F: Fn(&消息) + Send + Sync + 'static,
33 {
34 self.回调 = Some(Box::new(callback));
35 }
36
37 pub fn sync(&mut self, 前端参数: 默认输入) -> Result<(), 错误> {
39 self.参数 = 前端参数;
40 Ok(())
41 }
42
43 pub fn encode_evaluate(
45 &self,
46 目标函数配置: 目标配置,
47 ) -> Result<(Vec<码表项>, 默认指标), 错误> {
48 let mut 输入 = self.参数.clone();
49 输入.配置.optimization = Some(优化配置 {
50 objective: 目标函数配置,
51 metaheuristic: None,
52 });
53 let 上下文 = 默认上下文::新建(输入)?;
54 let 编码器 = 默认编码器::新建(&上下文)?;
55 let mut 目标函数 = 默认目标函数::新建(&上下文, 编码器)?;
56 let (指标, _) = 目标函数.计算(&上下文.初始决策, &None);
57 let 码表 = 上下文.生成码表(&目标函数.编码结果);
58
59 Ok((码表, 指标))
60 }
61
62 pub fn optimize(&self) -> Result<(), 错误> {
64 let 优化方法配置 = self.参数.配置.clone().optimization.unwrap().metaheuristic.unwrap();
65 let 上下文 = 默认上下文::新建(self.参数.clone())?;
66 let 编码器 = 默认编码器::新建(&上下文)?;
67 let mut 目标函数 = 默认目标函数::新建(&上下文, 编码器)?;
68 let mut 操作 = 默认操作::新建(&上下文)?;
69 let 求解器配置::SimulatedAnnealing(退火) = 优化方法配置;
70 退火.优化(&上下文.初始决策, &mut 目标函数, &mut 操作, &上下文, self);
71 Ok(())
72 }
73}
74
75impl 界面 for WebApi {
76 fn 发送(&self, 消息: 消息) {
77 if let Some(ref callback) = self.回调 {
78 callback(&消息);
79 }
80 }
81}