You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AnyLogic模拟80%良品率时缺陷计数始终为0的问题排查

问题分析与解决办法

你的代码错误核心原因

你写的条件判断逻辑出了问题,直接导致parts_defect永远不会被触发:

  • 第一个if里用了逻辑或(||):-2<probability || probability<2,这个条件对所有实数都成立——任何随机数要么大于-2,要么小于2,所以每次都会执行parts_count +=1,永远走不到后续分支。
  • 第二个else if的条件本身逻辑也有误,就算第一个条件改对,-2>probability || probability>2的写法也冗余,而且没必要用else if,直接用else就足够。

修正后的正态分布测试代码

把逻辑或改成逻辑与,同时简化分支判断:

double probability = normal(); 
if (-2 < probability && probability < 2) { 
    parts_count += 1; 
} else { 
    parts_defect +=1; 
}

更贴合你需求的方案(80%良品率)

既然你的目标是模拟80%的良品率,用正态分布其实没必要,直接用均匀分布随机数更直观且精准:

// 生成0到1之间的均匀随机数,小于0.8则判定为良品
if (uniform(0, 1) < 0.8) {
    parts_count += 1;
} else {
    parts_defect += 1;
}

或者用百分比形式的随机数,可读性更强:

if (uniform(0, 100) < 80) {
    parts_count += 1;
} else {
    parts_defect += 1;
}

小提示

AnyLogic里的随机数函数(比如normal()、uniform())都是内置封装好的,不需要额外调用外部库,基础语法和Java一致,重点要区分**逻辑与(&&)和逻辑或(||)**的适用场景——当需要同时满足多个条件时用&&,满足任一条件时用||。

内容的提问来源于stack exchange,提问作者Ismail

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 06:27:35