diff --git a/Cargo.lock b/Cargo.lock index a12b450..c59ef02 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1831,7 +1831,7 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tswn" -version = "0.1.9" +version = "0.1.10" dependencies = [ "base16384", "chrono", diff --git a/miner/Cargo.toml b/miner/Cargo.toml index db639a0..a75a47a 100644 --- a/miner/Cargo.toml +++ b/miner/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "tswn" description = "tool shenjack work shop namerena" -version = "0.1.9" +version = "0.1.10" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/miner/src/cacluate.rs b/miner/src/cacluate.rs index df409c6..574a962 100644 --- a/miner/src/cacluate.rs +++ b/miner/src/cacluate.rs @@ -63,7 +63,7 @@ pub fn cacl(config: CacluateConfig, id: u64, outfile: &PathBuf) { let prop = namer.get_property(); k += 1; - if k >= report_interval as u64 { + if k >= report_interval { let now = std::time::Instant::now(); let d_t: std::time::Duration = now.duration_since(start_time); let new_run_speed = k as f64 / d_t.as_secs_f64(); @@ -101,26 +101,27 @@ pub fn cacl(config: CacluateConfig, id: u64, outfile: &PathBuf) { } if prop > config.prop_expect as f32 { - let name = gen_name(i as u64); + let name = gen_name(i); let full_name = format!("{}@{}", name, config.team); // 虚评 namer.update_skill(); let xu = crate::evaluate::xuping::XuPing2_0_1015::evaluate(&namer); + let xu_qd = crate::evaluate::xuping::XuPing2_0_1015_QD::evaluate(&namer); - if xu < config.qp_expect as f64 { + if xu < config.qp_expect as f64 && xu_qd < config.qp_expect as f64{ continue; } - let xu_qd = crate::evaluate::xuping::XuPing2_0_1015_QD::evaluate(&namer); get_count += 1; - info!("Id:{:>15}|{}|{}|{}", i, full_name, xu, namer.get_info()); + info!("Id:{:>15}|{}|{:.4}|{:.4}|{}", i, full_name, xu, xu_qd, namer.get_info()); let write_in = format!( - // ,,, - "{},{},{},{}\n", + // ,,,, + "{},{:>15},{:.4},{:.4},{}\n", full_name, + i, xu, xu_qd, namer.get_info_csv() diff --git a/miner/src/evaluate/xuping/eval.rs b/miner/src/evaluate/xuping/eval.rs index f081fde..e37da78 100644 --- a/miner/src/evaluate/xuping/eval.rs +++ b/miner/src/evaluate/xuping/eval.rs @@ -19,8 +19,11 @@ pub fn predict_13(name: &Namer) -> f64 { let mut combined_skills: [f64; 43] = [0.0; 43]; // 长度取 64, 方便simd填充 - for i in 0..8 { - combined_skills[i] = name.name_prop[i] as f64; + // for i in 0..8 { + // combined_skills[i] = name.name_prop[i] as f64; + // } + for (i, prop) in combined_skills.iter_mut().enumerate().take(8) { + *prop = name.name_prop[i] as f64; } for i in 0..16 { if name.skl_freq[i] != 0 { @@ -122,7 +125,7 @@ pub fn predict_13(name: &Namer) -> f64 { pub fn poly(input: &[f64; 44]) -> [f64; 1034] { let mut result = [0.0; 1034]; for index in 0..1034 { - let mut l: i32 = 44; + let l: i32 = 44; let mut i: i32 = 0; let mut p: i32 = 0; let mut q: i32 = 0; @@ -171,8 +174,11 @@ if (x[42] > 0) x[42] += 20 */ pub fn predict_20(name: &Namer) -> f64 { let mut st: [f64; 44] = [0.0; 44]; - for i in 0..8 { - st[i] = name.name_prop[i] as f64; + // for i in 0..8 { + // st[i] = name.name_prop[i] as f64; + // } + for (i, prop) in st.iter_mut().enumerate().take(8) { + *prop = name.name_prop[i] as f64; } for i in 0..16 { if name.skl_freq[i] != 0 { @@ -181,7 +187,7 @@ pub fn predict_20(name: &Namer) -> f64 { } if st[32] > 0.0 { - let mut shadow_name = Namer::new_unchecked(&format!("{}?shadow@{}", name.name, name.team)); + let shadow_name = Namer::new_unchecked(&format!("{}?shadow@{}", name.name, name.team)); let mut shadow_sum = shadow_name.name_prop[0] as f64 / 3.0; for j in 1..8 { @@ -190,7 +196,7 @@ pub fn predict_20(name: &Namer) -> f64 { shadow_sum -= (shadow_name.name_prop[7] as f64 - 36.0) * 3.0; let mut shadowi = shadow_sum - 210.0; - shadowi = shadowi * st[32] as f64 / 100.0; + shadowi = shadowi * st[32] / 100.0; st[43] = shadowi; } else { st[43] = 0.0; @@ -203,24 +209,21 @@ pub fn predict_20(name: &Namer) -> f64 { let xp = poly(&st); let mut sum = xuping20::BASE; - let mut sum_qd = xuping20::BASE_QD; + let mut _sum_qd = xuping20::BASE_QD; - for i in 0..1034 { - unsafe { - sum += xp.get_unchecked(i) * xuping20::MODEL.get_unchecked(i); + unsafe { + for (i, xp) in xp.iter().enumerate() { + sum += xp * xuping20::MODEL.get_unchecked(i); } } - // for i in 0..1034 { - // sum_qd += xp[i] * xuping20::MODEL_QD[i]; - // } sum } pub fn predict_20_qd(name: &Namer) -> f64 { let mut st: [f64; 44] = [0.0; 44]; - for i in 0..8 { - st[i] = name.name_prop[i] as f64; + for (i, prop) in st.iter_mut().enumerate().take(8) { + *prop = name.name_prop[i] as f64; } for i in 0..16 { if name.skl_freq[i] != 0 { @@ -229,7 +232,7 @@ pub fn predict_20_qd(name: &Namer) -> f64 { } if st[32] > 0.0 { - let mut shadow_name = Namer::new_unchecked(&format!("{}?shadow@{}", name.name, name.team)); + let shadow_name = Namer::new_unchecked(&format!("{}?shadow@{}", name.name, name.team)); let mut shadow_sum = shadow_name.name_prop[0] as f64 / 3.0; for j in 1..8 { @@ -238,7 +241,7 @@ pub fn predict_20_qd(name: &Namer) -> f64 { shadow_sum -= (shadow_name.name_prop[7] as f64 - 36.0) * 3.0; let mut shadowi = shadow_sum - 210.0; - shadowi = shadowi * st[32] as f64 / 100.0; + shadowi = shadowi * st[32] / 100.0; st[43] = shadowi; } else { st[43] = 0.0; @@ -252,8 +255,8 @@ pub fn predict_20_qd(name: &Namer) -> f64 { let mut sum_qd = xuping20::BASE_QD; - for i in 0..1034 { - sum_qd += xp[i] * xuping20::MODEL_QD[i]; + for (i, xp) in xp.iter().enumerate() { + sum_qd += xp * xuping20::MODEL_QD[i]; } sum_qd diff --git a/miner/src/name.rs b/miner/src/name.rs index 992ed4b..b29cfed 100644 --- a/miner/src/name.rs +++ b/miner/src/name.rs @@ -50,7 +50,7 @@ impl TeamNamer { } } #[inline(always)] - pub fn clone_vals(&self) -> [u8; 256] { self.val.clone() } + pub fn clone_vals(&self) -> [u8; 256] { self.val } } #[derive(Debug, Clone)] @@ -64,6 +64,7 @@ pub struct Namer { pub skl_freq: [u8; 40], } +#[allow(dead_code)] impl Namer { /// 最完整的、最简单的 new /// 可以直接丢一个 name 进来 @@ -150,7 +151,7 @@ impl Namer { // simd 优化 #[cfg(feature = "simd")] { - let mut simd_val = val.clone(); + let mut simd_val = val; let mut simd_val_b = [0_u8; 256]; let simd_181 = u8x64::splat(181); let simd_160 = u8x64::splat(160); @@ -236,7 +237,7 @@ impl Namer { + *prop_name.get_unchecked(4) as u32 + *prop_name.get_unchecked(5) as u32 + *prop_name.get_unchecked(6) as u32; - + *name_prop.get_unchecked_mut(1) = median( *prop_name.get_unchecked(10), *prop_name.get_unchecked(11), @@ -303,8 +304,8 @@ impl Namer { #[cfg(feature = "simd")] { - let mut simd_val = self.val.clone(); - let mut simd_val_b = self.val.clone(); + let mut simd_val = self.val; + let mut simd_val_b = self.val; let simd_181 = u8x64::splat(181); let simd_199 = u8x64::splat(199); let simd_128 = u8x64::splat(128); @@ -316,8 +317,8 @@ impl Namer { unsafe { let mut x = u8x64::from_slice(simd_val.get_unchecked(i..)); let mut y = u8x64::from_slice(simd_val_b.get_unchecked(i..)); - x = x * simd_181 + simd_199 & simd_128; - y = y * simd_53 & simd_63 ^ simd_32; + x = (x * simd_181 + simd_199) & simd_128; + y = (y * simd_53) & simd_63 ^ simd_32; x.copy_to_slice(simd_val.get_unchecked_mut(i..)); y.copy_to_slice(simd_val_b.get_unchecked_mut(i..)); } @@ -362,11 +363,10 @@ impl Namer { } } let mut last = -1; - let mut j = 0; - for i in (64..128).step_by(4) { + for (j, i) in (64..128).step_by(4).enumerate() { let p = unsafe { min( - min(*self.name_base.get_unchecked(i + 0), *self.name_base.get_unchecked(i + 1)), + min(*self.name_base.get_unchecked(i), *self.name_base.get_unchecked(i + 1)), min(*self.name_base.get_unchecked(i + 2), *self.name_base.get_unchecked(i + 3)), ) }; @@ -378,7 +378,6 @@ impl Namer { } else { self.skl_freq[j] = 0 } - j += 1; } if last != -1 { self.skl_freq[last as usize] <<= 1; @@ -401,17 +400,15 @@ impl Namer { #[inline(always)] pub fn get_property(&self) -> f32 { let sum1 = self.name_prop[1..=7].iter().sum::(); - let sum2 = self.name_prop[0] as u32; + let sum2 = self.name_prop[0]; sum1 as f32 + (sum2 as f32 / 3_f32) } pub fn get_净化(&self) -> u8 { // self.skl_freq[17] for (i, v) in self.skl_freq.iter().enumerate() { - if *v != 0 { - if self.skl_id[i] == 17 { - return *v; - } + if *v != 0 && self.skl_id[i] == 17 { + return *v; } } 0 @@ -420,10 +417,8 @@ impl Namer { pub fn get_分身(&self) -> u8 { // self.skl_freq[23] for (i, v) in self.skl_freq.iter().enumerate() { - if *v != 0 { - if self.skl_id[i] == 23 { - return *v; - } + if *v != 0 && self.skl_id[i] == 23 { + return *v; } } 0 @@ -432,10 +427,8 @@ impl Namer { pub fn get_幻术(&self) -> u8 { // self.skl_freq[24] for (i, v) in self.skl_freq.iter().enumerate() { - if *v != 0 { - if self.skl_id[i] == 24 { - return *v; - } + if *v != 0 && self.skl_id[i] == 24 { + return *v; } } 0