EnergyModelComputingNode
当CPU跑满时的最大能量消耗
protected double maxActiveConsumption; // Consumed energy when the cpu is operating at 100% in Watt
空闲时能量消耗(最低消耗)
protected double idleConsumption; // Consumed energy when idle (in Watt)
CPU已经消耗的能量
protected double cpuEnergyConsumption = 0;
电池容量
protected double batteryCapacity;
初始化电池
protected double initialBatteryLevel = 1;
连接类型(WIFI,蜂窝)
protected String connectivity;
是否是电池供电
protected boolean isBatteryPowered = false;
public static final int TRANSMISSION = 0; // used to update edge devices batteries
public static final int RECEPTION = 1;
初始化NULL,避免空指针
/**
* An attribute that implements the Null Object Design Pattern to avoid
* {@link NullPointerException} when using the NULL object instead of
* attributing null to EnergyModelComputingNode variables.
*/
public static final EnergyModelComputingNode NULL = EnergyModelComputingNodeNull.getInstance();
网络能量消耗
protected double networkEnergyConsumption;
传输每比特的能量消耗
protected double transmissionEnergyPerBits;
接受每比特信号的能量消耗
protected double receptionEnergyPerBits;
初始化能量模型
public EnergyModelComputingNode(double maxActiveConsumption, double idleConsumption) {
this.setMaxActiveConsumption(maxActiveConsumption);
this.setIdleConsumption(idleConsumption);
}
更新已经消耗的能量
public void updateStaticEnergyConsumption() {
cpuEnergyConsumption += getIdleConsumption() / 3600 * SimulationParameters.updateInterval;
}
获取CPU消耗的能量
public double getCpuEnergyConsumption() {
return cpuEnergyConsumption;
}
得到CPU能量消耗和网络传输消耗
public double getTotalEnergyConsumption() {
return cpuEnergyConsumption + networkEnergyConsumption;
}
得到满负载能量消耗
public double getMaxActiveConsumption() {
return maxActiveConsumption;
}
设置满负载能量消耗
public void setMaxActiveConsumption(double maxActiveConsumption) {
this.maxActiveConsumption = maxActiveConsumption;
}
得到空闲能量消耗
public double getIdleConsumption() {
return idleConsumption;
}
设置空闲能量消耗
public void setIdleConsumption(double idleConsumption) {
this.idleConsumption = idleConsumption;
}
得到电池容量
public double getBatteryCapacity() {
return batteryCapacity;
}
设置电池容量
public void setBatteryCapacity(double batteryCapacity) {
this.batteryCapacity = batteryCapacity;
}
得到剩余电量(不是电池供电返回-1,没有电返回0)
public double getBatteryLevelWattHour() {
if (!isBatteryPowered())
return -1;
if (getBatteryCapacity() * this.initialBatteryLevel < getTotalEnergyConsumption())
return 0;
return (getBatteryCapacity() * this.initialBatteryLevel) - getTotalEnergyConsumption();
}
得到电池容量百分比
public double getBatteryLevelPercentage() {
return getBatteryLevelWattHour() * 100 / getBatteryCapacity();
}
是否是电池供电
public boolean isBatteryPowered() {
return isBatteryPowered;
}
设置是否由电池供电
public void setBattery(boolean battery) {
this.isBatteryPowered = battery;
}
设置初始化余电百分比
public void setIntialBatteryPercentage(double batteryLevel) {
this.initialBatteryLevel = batteryLevel / 100.0;
}
得到连通性类型
public String getConnectivityType() {
return connectivity;
}
设置连接类型(WIFI,蜂窝)
public void setConnectivityType(String connectivity) {
this.connectivity = connectivity;
if ("cellular".equals(connectivity)) {
transmissionEnergyPerBits = SimulationParameters.cellularDeviceTransmissionWattHourPerBit;
receptionEnergyPerBits = SimulationParameters.cellularDeviceReceptionWattHourPerBit;
} else if ("wifi".equals(connectivity)) {
transmissionEnergyPerBits = SimulationParameters.wifiDeviceTransmissionWattHourPerBit;
receptionEnergyPerBits = SimulationParameters.wifiDeviceReceptionWattHourPerBit;
} else {
transmissionEnergyPerBits = SimulationParameters.ethernetWattHourPerBit / 2;
receptionEnergyPerBits = SimulationParameters.ethernetWattHourPerBit / 2;
}
}
更新网络能量消耗
public void updatewirelessEnergyConsumption(double sizeInBits, int flag) {
if (flag == RECEPTION)
networkEnergyConsumption += sizeInBits * transmissionEnergyPerBits;
else
networkEnergyConsumption += sizeInBits * receptionEnergyPerBits;
}
更新CPU能量消耗
public void updateDynamicEnergyConsumption(double length, double mipsCapacity) {
cpuEnergyConsumption += ((getMaxActiveConsumption() - getIdleConsumption()) / 3600 * length / mipsCapacity);
}