Имитация отжига в оптапланнере - PullRequest
0 голосов
/ 17 февраля 2020

Добрый день.

Мне нужно решить проблему со временем windows, используя дорожный график, где время работы клиента и депо ограничено во времени. Я загружаю исходные данные о проблеме из моего файла.
Как правильно установить в конфигурации алгоритм моделирования отжига и жестких правил по каплям по емкостям и времени windows? Мне нужен пример рабочей конфигурации.

    //my loader problem from json file
    Loader loader = new Loader();
    loader.load(AppConfig.CURRENT_DIR + "\\" + "problem_cvrptw.json");
    InputBuffer buf = loader.getBuf();

    //set problem
    TimeWindowedVehicleRoutingSolution problem = new TimeWindowedVehicleRoutingSolution();
    problem.setCustomerList(buf.getCustomers());
    problem.setDepotList(buf.getDepots());
    problem.setVehicleList(buf.getVehicles());
    problem.setLocationList(buf.getLocations());
    problem.setDistanceType(DistanceType.ROAD_DISTANCE);
    problem.setDistanceUnitOfMeasurement(null); //not "sec"

    //build solver
    SolverConfig solverConfig = SolverConfig.createFromXmlResource("vehicleRoutingSolverConfig.xml");
    SolverFactory<TimeWindowedVehicleRoutingSolution> solverFactory = SolverFactory.create(solverConfig);
    Solver<TimeWindowedVehicleRoutingSolution> solver =  solverFactory.buildSolver();

    //solve 
    TimeWindowedVehicleRoutingSolution solution = solver.solve(problem);

Как создать конфигурацию для решения проблемы с алгоритмом отжига с использованием SolverConfig solverConfig = new SolverConfig ()?

1 Ответ

0 голосов
/ 18 февраля 2020

В XML, просто следуйте этому разделу документации . Это будет выглядеть так:

<localSearch>
    ...
    <acceptor>
      <simulatedAnnealingStartingTemperature>2hard/100soft</simulatedAnnealingStartingTemperature>
    </acceptor>
</localSearch>

Если вы хотите избежать использования XML , вы можете сделать что-то вроде этого:

solverConfig = new SolverConfig(...).withPhases(
       new ConstructionHeuristicPhaseConfig(),
       new LocalSearchPhaseConfig.withLocalSearchType(LATE_ACCEPTANCE));

Теперь вместо LATE_ACCEPTANCE вы можете использовать SIMMULATED_ANNEALING, но это не может работать без начального темперамента, поэтому вам придется сделать что-то вроде withAcceptor().with....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...