如何在AnyLogic中设置车辆偏好速度?动态拥堵模拟报错求助
解决Car类中
setPreferredSpeed(double)方法未定义的报错 问题本质
报错明确指出Car类不存在setPreferredSpeed(double)方法,原因是你的Car类没有定义该方法,或者你调用的方法名与类中实际存在的方法名不匹配。
具体解决步骤
1. 在Car类中添加setPreferredSpeed方法
打开你的Car类定义文件,添加一个接收double类型参数的setPreferredSpeed setter方法,示例如下:
public class Car { // 假设类中已有存储偏好速度的属性 private double preferredSpeed; // 你已实现的getSpeed方法(根据代码推测) public double getSpeed() { // 这里返回实际的车辆速度,比如当前行驶速度或偏好速度 return this.preferredSpeed; } // 添加setPreferredSpeed方法 public void setPreferredSpeed(double adjustedSpeed) { this.preferredSpeed = adjustedSpeed; // 可选:添加速度范围校验,比如确保速度非负 // this.preferredSpeed = Math.max(0.0, adjustedSpeed); } }
2. 检查是否调用了错误的方法名
如果Car类中已经存在类似的速度设置方法,但名称不同(比如setSpeed、setDesiredSpeed),直接将代码中的setPreferredSpeed替换为正确的方法名即可。例如:
// 假设Car类有setSpeed方法 car.setSpeed(adjustedSpeed);
额外优化:修复循环逻辑冗余
你的代码存在逻辑问题:增强for循环已经遍历每一辆车,但你又重新随机获取了一个Car实例,导致大部分遍历的车辆被跳过,仅修改随机选中的那一辆。根据你的需求调整代码:
需求1:随机修改一辆车的速度
if (!cars.isEmpty()) { int randomIndex = uniform_discr(0, cars.size() - 1); Car car = cars.get(randomIndex); double currentSpeed = car.getSpeed(); double minCongestionFactor = 0.8; double maxCongestionFactor = 1.0; double randomCongestionFactor = minCongestionFactor + Math.random() * (maxCongestionFactor - minCongestionFactor); double adjustedSpeed = currentSpeed * randomCongestionFactor; // 使用正确的方法设置速度 car.setPreferredSpeed(adjustedSpeed); }
需求2:修改所有车辆的速度
for (Car car : cars) { double currentSpeed = car.getSpeed(); double minCongestionFactor = 0.8; double maxCongestionFactor = 1.0; double randomCongestionFactor = minCongestionFactor + Math.random() * (maxCongestionFactor - minCongestionFactor); double adjustedSpeed = currentSpeed * randomCongestionFactor; // 使用正确的方法设置速度 car.setPreferredSpeed(adjustedSpeed); }
内容的提问来源于stack exchange,提问作者Jahidul Hasan Razib
相关产品推荐
相关产品推荐

