Вопрос или проблема
Это мой код на Java в iFogSim:
package org.fog.test.perfeval;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.LinkedList;
import java.util.List;
import org.cloudbus.cloudsim.Host;
import org.cloudbus.cloudsim.Log;
import org.cloudbus.cloudsim.Pe;
import org.cloudbus.cloudsim.Storage;
import org.cloudbus.cloudsim.core.CloudSim;
import org.cloudbus.cloudsim.power.PowerHost;
import org.cloudbus.cloudsim.provisioners.RamProvisionerSimple;
import org.cloudbus.cloudsim.sdn.overbooking.BwProvisionerOverbooking;
import org.cloudbus.cloudsim.sdn.overbooking.PeProvisionerOverbooking;
import org.fog.application.AppEdge;
import org.fog.application.AppLoop;
import org.fog.application.Application;
import org.fog.application.selectivity.FractionalSelectivity;
import org.fog.entities.Actuator;
import org.fog.entities.FogBroker;
import org.fog.entities.FogDevice;
import org.fog.entities.FogDeviceCharacteristics;
import org.fog.entities.Sensor;
import org.fog.entities.Tuple;
import org.fog.placement.Controller;
import org.fog.placement.ModuleMapping;
import org.fog.placement.ModulePlacementEdgewards;
import org.fog.placement.ModulePlacementMapping;
import org.fog.policy.AppModuleAllocationPolicy;
import org.fog.scheduler.StreamOperatorScheduler;
import org.fog.utils.FogLinearPowerModel;
import org.fog.utils.FogUtils;
import org.fog.utils.TimeKeeper;
import org.fog.utils.distribution.DeterministicDistribution;
public class dart {
public static void main(String[] args) {
// Инициализация CloudSim
CloudSim.init(1, null, false);
// Создание FogDevice для буйка DART
FogDevice dartBuoy = createDartBuoy();
// Симуляция чтения данных сенсоров
simulateSensorReadings(dartBuoy);
// Запуск симуляции
CloudSim.startSimulation();
CloudSim.stopSimulation();
}
private static FogDevice createDartBuoy() {
// Параметры: id, name, mips, ram, bw, storage, upFogDeviceId
int dartBuoyId = 1; // Уникальный ID для буйка DART
String dartBuoyName = "DARTBuoy";
int mips = 1000; // MIPS (миллион инструкций в секунду)
int ram = 512; // Оперативная память в МБ
int bw = 1000; // Пропускная способность в Мбит/с
int storage = 10000; // Хранение в МБ
int upFogDeviceId = -1; // -1 указывает на отсутствие родительского устройства
// Создание устройства DART buoy
FogDevice dartBuoy = new FogDevice(dartBuoyId, dartBuoyName, mips, ram, bw, storage, upFogDeviceId);
return dartBuoy;
}
private static void simulateSensorReadings(FogDevice dartBuoy) {
for (int i = 0; i < 10; i++) {
double pressure = generateRandomPressure();
double temperature = generateRandomTemperature();
// Логирование данных
System.out.println("Чтения сенсора от " + dartBuoy.getName() + ":");
System.out.println("Давление: " + pressure + " hPa");
System.out.println("Температура: " + temperature + " °C");
System.out.println("-----------------------------");
try {
Thread.sleep(1000); // Симуляция задержки между чтениями
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private static double generateRandomPressure() {
// Генерация случайного давления от 1000 до 1100 hPa
return 1000 + Math.random() * 100;
}
private static double generateRandomTemperature() {
// Генерация случайной температуры от 0 до 30 °C
return Math.random() * 30;
}
}
При попытке создать компонент буйка DART (комментарий: // Создание устройства DART buoy) я продолжаю получать ошибку с сообщением “Конструктор FogDevice(int, String, int, int, int, int, int) не определен”, хотя библиотека, необходимая для конструктора, присутствует. Как это можно решить?
Я ожидаю вывод данных сенсора в следующем формате:
Чтения сенсора:
Давление: 1034.56 hPa
Температура: 22.45 °C
Чтения сенсора:
Давление: 1101.23 hPa
Температура: 18.76 °C
Ответ или решение
Ошибка "The constructor FogDevice(int, String, int, int, int, int, int) is undefined" возникает, когда вы пытаетесь создать объект класса FogDevice
, но конструктор с указанной сигнатурой не существует в данной версии библиотеки. Давайте разберёмся, как это исправить.
1. Проверка документации и импорта
Прежде всего, убедитесь, что вы используете правильную версию библиотеки iFogSim. Возможно, в более новой версии API было изменено, добавлено или удалено количество параметров конструктора. Проверьте документацию, чтобы убедиться, что параметры конструктора соответствуют тому, что вы передаёте. Обратите внимание на следующее:
- Убедитесь, что вы импортировали правильные классы.
- Проверьте, были ли изменения в сигнатурах конструкторов
FogDevice
в обновлениях библиотеки.
2. Анализ параметров конструктора
Каждый конструктор FogDevice
может принимать разные параметры. Например, если международные параметры конструктора в новой версии выглядят иным образом, вам нужно будет изменить ваш код в методе createDartBuoy()
. Вот как выглядит типичная сигнатура конструктора FogDevice
в более новых версиях:
FogDevice(int id, String name, FogDeviceCharacteristics characteristics,
List<Host> hosts, AppModuleAllocationPolicy appModuleAllocationPolicy);
Вместо передачи всех параметров в одном конструкторе, используйте объект FogDeviceCharacteristics
и список Host
, чтобы создать устройство.
3. Пример исправленного кода
Вот корректный способ создания объекта FogDevice
с учетом новых параметров:
private static FogDevice createDartBuoy() {
// Инициализируем характеристики устройства
FogDeviceCharacteristics characteristics = new FogDeviceCharacteristics(
"DARTBuoy",
1000, // MIPS
512, // RAM
1000, // BW
10000,// Storage
"DC", // Положение
new ArrayList<>()
);
// Создаем список хостов
List<Host> hosts = new ArrayList<>();
// Здесь можно добавить хосты, если они нужны
// Создаем политику распределения модулей приложений
AppModuleAllocationPolicy appModuleAllocationPolicy = new AppModuleAllocationPolicy(hosts);
// Создаем FogDevice с использованием нового конструктора
FogDevice dartBuoy = new FogDevice(dartBuoyId, dartBuoyName,
characteristics, hosts, appModuleAllocationPolicy);
return dartBuoy;
}
4. Запуск приложения
После внесения вышеуказанных изменений ваш код, должен корректно создать объект FogDevice
, и ошибка должна исчезнуть. Попробуйте запустить ваше приложение снова.
Ожидаемый вывод
После исправления, ваш код должен генерировать результаты, аналогичные приведённым ниже:
Sensor Readings from DARTBuoy:
Pressure: 1034.56 hPa
Temperature: 22.45 °C
-----------------------------
Sensor Readings from DARTBuoy:
Pressure: 1101.23 hPa
Temperature: 18.76 °C
Заключение
Следуя этим рекомендациям, вы сможете успешно устранить возникшую ошибку и корректно инициализировать устройства в вашем приложении. Убедитесь, что ваша среда разработки и библиотека обновлены для избежания подобных конфликтов в будущем.