Некоторое время назад наткнулся на CLP. Понравилось. захотелось попробовать решить практическую задачу по моделированию.
Поискал, почитал. Пока не получается. Проблемы см. ниже.
Наверняка проблема стандартная, но нигде не нашел примера решения именно для CLP.
Проблема
Есть несколько рядов данных (массивы) — A и B. В каждом массиве N элементов.
Есть предполагаемая зависимость B от A.
B[t]=A[t]*P1+P2+Error[t].
t — от 1 до N.
Error – ошибка модели.
Задача найти такие значения P1 и P2, что сумма квадратов Error минимальна.
Решается стандартными статистическими методами. Например, построение обычного линейного тренда.
Усложнение
Каждый элемент массивов А и В задан интервально, например
A[1] in 120..125.
A[2] in 132..147.
...
A[N] in 10..15.
Задача найти такие интервалы для параметров P1 и P2 , чтобы
1. Сумма квадратов Error была минимальна
2. Интервал каждого из параметров был минимальной ширины. Т.е. при прочих равных решение, в котором P1 in 50..60, лучше решения в котором P1 in 10..30.
Что получилось.
"Криво" запихнуть эту модель в sicstus prolog. Использовался модуль clpfd.
A1 in 120..125.
A2 in 132..147.
...
A20 in 10..15.
B1 in 240..245.
B2 in 270..290.
...
B20 in 20..25.
B1=A1*P1+P2+Error1,
B2=A2*P1+P2+Error2,
....
B20=A20*P1+P2+Error20,
Error=Error1+Error2+.... Error20
P1 in 0..100
P2 in 0..100
Что не получилось.
Задать условия по минимизации ширины интервалов P1 и P2.
Буду оч благодарен (если Москва — проставлюсь пивом ) если кто покажет как "правильно" и "красиво" строить подобные модели. Или ткните носом в ненайденные примеры/статьи. Любой фидбек приветствуется.