Уважаемые пользователи OptaPlanner,
Я использую в качестве основы пример маршрутизации транспортных средств в зависимости от времени. Здесь я удалил все классы TimeWindowed, например. содержимое «TimeWindowedActivity.java» перемещается и объединяется с «Activity.java» и т. д.
Теперь я хотел бы добавить список окон времени работы клиента для определенных действий. Эти временные окна (количество элементов Списка) могут быть разными для каждого действия, а некоторые действия вообще не имеют таких тегов. Это расширение должно позволять учитывать, что действия могут выполняться только в том случае, если они соответствуют тому, что время прибытия лежит между определенным числом (списком) временных окон операций клиента, определяемых: «customerOperationStartTime» и «customerOperationEndTime».
Для решения этой проблемы я создал класс "CustomerOperationTimes.java":
public class CustomerOperationTimes {
private Long customerOperationStartTime;
private Long customerOperationEndTime;
public Long getCustomerOperationStartTime() {
return customerOperationStartTime;
}
public void setCustomerOperationStartTime(Long customerOperationStartTime) {
this.customerOperationStartTime = customerOperationStartTime;
}
public Long getCustomerOperationEndTime() {
return customerOperationEndTime;
}
public void setCustomerOperationEndTime(Long customerOperationEndTime) {
this.customerOperationEndTime = customerOperationEndTime;
}
}
В Activity.java я добавил:
private CustomerOperationTimes customerOperationTimes;
private List<CustomerOperationTimes> customerOperationTimesList ;
public CustomerOperationTimes getCustomerOperationTimes() {
return customerOperationTimes;
}
public void setCustomerOperationTimes(CustomerOperationTimes customerOperationTimes) {
this.customerOperationTimes = customerOperationTimes;
}
public List<CustomerOperationTimes> getCustomerOperationTimesList() {
return customerOperationTimesList;
}
public void setCustomerOperationTimesList(List<CustomerOperationTimes> customerOperationTimesList) {
this.customerOperationTimesList = customerOperationTimesList;
}
Для тестирования я создал xml-файл с одним действием:
…
<activityList id="33">
<Activity id="34">
<activityID>1</activityID>
<activityStatus>101</activityStatus>
<location reference="7" />
<appointmentStartTime>1395317700</appointmentStartTime> <!-- Unix time in sec => 2014/03/20 12:15:00 -->
<appointmentEndTime>1395324900</appointmentEndTime> <!-- Unix time in sec => 2014/03/20 14:15:00 -->
<plannedWorkDuration>4500</plannedWorkDuration> <!-- in sec => 75min duration -->
<customerOperationTimesList id="100">
<customerOperationTimes id="101">
<customerOperationStartTime>1395317800</customerOperationStartTime>
<customerOperationEndTime>1395324700</customerOperationEndTime>
</customerOperationTimes>
<customerOperationTimes id="102">
<customerOperationStartTime>1395317800</customerOperationStartTime>
<customerOperationEndTime>1395324700</customerOperationEndTime>
</customerOperationTimes>
</customerOperationTimesList>
</Activity>
</activityList>
…
!!! Этот файл не может быть прочитан и создает исключение.
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Problem reading inputSolutionFile (data\engineerrouting\unsolved\4es_4e_16a_4_8-18s_cot.xml).
at org.optaplanner.persistence.xstream.impl.domain.solution.XStreamSolutionFileIO.read(XStreamSolutionFileIO.java:66)
at org.optaplanner.examples.common.persistence.XStreamSolutionDao.readSolution(XStreamSolutionDao.java:37)
...
Как видите, ошибка возникает в файле XStreamSolutionDao.java при попытке прочитать входной xml-файл:
Line 37: Solution solution = xStreamSolutionFileIO.read(inputSolutionFile);
!!! Но выполняется следующее содержимое xml (без списка и «только» 1 тег customerOperationTimes):
<activityList id="33">
<Activity id="34">
<activityID>1</activityID>
<activityStatus>101</activityStatus>
<location reference="7" />
<appointmentStartTime>1395317700</appointmentStartTime> <!-- Unix time in sec => 2014/03/20 12:15:00 -->
<appointmentEndTime>1395324900</appointmentEndTime> <!-- Unix time in sec => 2014/03/20 14:15:00 -->
<plannedWorkDuration>4500</plannedWorkDuration> <!-- in sec => 75min duration -->
<customerOperationTimes id="101">
<customerOperationStartTime>1395317800</customerOperationStartTime>
<customerOperationEndTime>1395324700</customerOperationEndTime>
</customerOperationTimes>
</Activity>
</activityList>
Спасибо за ваши предложения и помощь.