Я пытаюсь выполнить пару задач и использовать ограниченный набор фактов без создания всех возможных комбинаций. Хотя следующее правило еще не завершено, производительность очень медленная. Я ищу предложения.Есть ли способ улучшить эффективность правил?
when
$rp : RoutePair()
accumulate(RouteRun(routePair == $rp, $runId : runId);
$routeRunListAm : collectList($runId),
$count : count();
$count == 4)
accumulate($pr : PairableRuns((runId1 == $routeRunListAm.toArray()[0] && runId2 == $routeRunListAm.toArray()[1])
|| (runId1 == $routeRunListAm.toArray()[0] && runId2 == $routeRunListAm.toArray()[2])
|| (runId1 == $routeRunListAm.toArray()[0] && runId2 == $routeRunListAm.toArray()[3])
|| (runId1 == $routeRunListAm.toArray()[1] && runId2 == $routeRunListAm.toArray()[2])
|| (runId1 == $routeRunListAm.toArray()[1] && runId2 == $routeRunListAm.toArray()[3])
|| (runId1 == $routeRunListAm.toArray()[2] && runId2 == $routeRunListAm.toArray()[3]));
$pairableRunsListPm : collectList($pr),
$count : count();
$count >= 2)
accumulate(RouteRun(routePair == $rp, $returnRunId : returnRunId);
$routeRunListPm : collectList($returnRunId))
accumulate($pr : PairableRuns((runId1 == $routeRunListPm.toArray()[0] && runId2 == $routeRunListPm.toArray()[1])
|| (runId1 == $routeRunListPm.toArray()[0] && runId2 == $routeRunListPm.toArray()[2])
|| (runId1 == $routeRunListPm.toArray()[0] && runId2 == $routeRunListPm.toArray()[3])
|| (runId1 == $routeRunListPm.toArray()[1] && runId2 == $routeRunListPm.toArray()[2])
|| (runId1 == $routeRunListPm.toArray()[1] && runId2 == $routeRunListPm.toArray()[3])
|| (runId1 == $routeRunListPm.toArray()[2] && runId2 == $routeRunListPm.toArray()[3]));
$pairableRunsListPm : collectList($pr),
$count : count();
$count >= 2)
затем
Почему 'toArray() [x]'? Разве это не 'get (x)' так же хорошо? – laune
Вы предполагаете, что собранный список $ routeRunListAm содержит значения в определенном порядке, потому что в противном случае асимметричное совпадение с runId1, предшествующим runId2, не имеет смысла. Я не вижу, как этот порядок должен произойти, поскольку накопление не связано с детерминированной последовательностью. – laune
Функция факта и осуществимости PairableRuns будет обрабатывать любой порядок. Как я могу получить список? Это позволит сократить количество проверенных трасс, что необходимо будет выполнить. – user2952819