/
GYSFlash
/
MonteCarloApp
Обзор
Документация
Войти
/
GYSFlash
/
MonteCarloApp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/main/java/org/example/Main.java
68 строк
3 KB
Юрий
first_commit
17 июн 2025, 19:17
17 июн 2025, 19:17
ec7b4c9
Код
Авторство
О чём код?
package org.example; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.util.List; public class Main { private static final Logger logger = LogManager.getLogger(Main.class); public static void main(String[] args) { logger.info("Запуск приложения"); try { logger.info("Загрузка вершин из JSON-файла"); List<Point> vertices = JsonLoader.loadPoints("debf.json"); logger.debug("Загружено вершин: {}", vertices != null ? vertices.size() : 0); if (vertices == null || vertices.isEmpty()) { logger.error("Не удалось загрузить вершины или список пуст"); return; } logger.info("Создание геометрической фигуры"); debfShape shape = new debfShape(vertices); double exactArea = shape.exactArea(); logger.info("Точная площадь фигуры: {}", exactArea); logger.debug("Вычисление границ ограничивающего прямоугольника"); double minX = vertices.stream().mapToDouble(p -> p.x).min().orElse(0); double maxX = vertices.stream().mapToDouble(p -> p.x).max().orElse(1); double minY = vertices.stream().mapToDouble(p -> p.y).min().orElse(0); double maxY = vertices.stream().mapToDouble(p -> p.y).max().orElse(1); logger.debug("Границы: X[{}, {}], Y[{}, {}]", minX, maxX, minY, maxY); logger.info("Инициализация калькулятора Монте-Карло"); MonteCarloCalculator calculator = new MonteCarloCalculator(shape, minX, maxX, minY, maxY); int[] samples = {1000, 10000, 100000, 1000000, 10000000}; logger.info("Начало расчётов методом Монте-Карло для выборок: {}", samples); System.out.printf("%-12s %-18s %-18s %-10s%n", "Samples", "Area", "Error %", "Time(ms)"); for (int n : samples) { logger.debug("Старт расчёта для {} точек", n); long startTime = System.currentTimeMillis(); MonteCarloCalculator.Result result = calculator.estimateArea(n); long duration = System.currentTimeMillis() - startTime; System.out.printf("%-12d %-18.6f %-18.4f %-10d%n", n, result.estimatedArea(), result.relativeError(), duration); if (duration > 2000) { logger.warn("Долгое выполнение для {} точек: {} мс", n, duration); } } logger.info("Расчёты методом Монте-Карло успешно завершены"); } catch (Exception e) { logger.error("Критическая ошибка выполнения", e); } finally { logger.info("Завершение работы приложения"); } } }