Лучший способ выбрать лучший компонент? - PullRequest
0 голосов
/ 06 июня 2018

Я создаю экспертную систему, которая должна быть способна собрать компьютер после того, как он задаст пользователю вопрос, чтобы понять его потребности!Моя проблема в том, чтобы выбрать лучший процессор, лучший RAM, лучший VGA ecc ecc, чтобы показать пользователю только одну конфигурацию!
Компоненты хранятся следующим образом:

configuration(P, M, R, C, A, V, S, D, H, Dvd, Price_range) :-
processor(P, Proc_price, Price_range),
motherboard(M, Motherboard_price, Price_range),
ram(R, Ram_price, Price_range),
case(C, Case_price, Price_range),
ali(A, Ali_price, Price_range),
video_card(V, Vga_price, Price_range),
ssd(S, Ssd_price, Price_range),
monitor(D, Monitor_price, Price_range),
dvd(Dvd, Dvd_price, Price_range),
hdd(H, Hdd_price, Price_range).
Price is Proc_price + Motherboard_price + Ram_price + Case_price + Ali_price + Vga_price + Ssd_price + Dvd_price + Monitor_price + Hdd_price.

Я непрошу вас сделать это для меня, я просто прошу некоторые предложения, чтобы сделать это, я, вероятно, должен добавить некоторые элементы для каждого компонента и, возможно, некоторые отношения, но я нахожусь в тупике.

РЕДАКТИРОВАТЬ:

Я определил предикат конфигурации, но таким образом я могу определить все возможные конфигурации с помощью forall / findall, но мне нужно сгенерировать только лучшую конфигурацию, поэтомувозможно, мне нужно определить один предикат выбора для каждого компонента.

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

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

compatibility(motherboard, processor)
compatibility(motherboard, ram) 
compatibility(motherboard, vga)
compatibility(processor, ram)

1 Ответ

0 голосов
/ 06 июня 2018

Учитывая, что вы описали объект, состоящий из нескольких компонентов, интересным подходом является использование DCG для выражения композиции компонентов.Например:

computer --> monitor, keyboard, mouse, motherboard.

motherboard --> [motherboard], memory, processor.

memory --> [memory].
processor --> [processor].
monitor --> [monitor].
keyboard --> [keyboard].
mouse --> [mouse].
...

Затем можно использовать предикат phrase/2, чтобы получить список деталей, необходимых для создания чего-либо.Например:

| ?- phrase(computer, Parts).
Parts = [monitor, keyboard, mouse, motherboard, memory, processor]
yes

Конечно, вы можете легко иметь разные альтернативы (например, строить разные компьютеры), добавив больше правил грамматики.Например, материнская плата премиум-класса с дискретной видеокартой по сравнению с базовой материнской платой со встроенной графикой.

Получив описанное базовое целое / детали, вы можете начать добавлять такие характеристики, как цена, путем расширения правил грамматики.Например:

computer(Price) -->
    monitor(MonitorPrice),
    keyboard(KeyboardPrice),
    mouse(MousePrice),
    motherboard(MotherboardPrice),
    Price is MonitorPrice + KeyboardPrice + MousePrice + MotherboardPrice.

Вы также можете использовать ограничения для большей гибкости (например, легко перечислять сборки в ценовом диапазоне).

...