【发布时间】:2018-06-05 21:59:25
【问题描述】:
我正在构建一个专家系统,该系统应该能够在向用户提出一些问题以了解他的需求后组装计算机!我的问题是选择最好的处理器、最好的内存、最好的 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 定义所有可能的配置,但我需要生成最好的配置,所以也许我需要定义为每个组件选择一个谓词。
你谈到了一个分数,我可以为每个组件设置一个分数,这意味着该组件如何满足用户的需求。
我在组件之间添加了一些关系,我应该在定义配置时使用它们。关于这些关系,我不确定是否必须像其他组件一样默认存储它们,或者我必须断言它们,例如通过检查 bot 组件是否具有相同的套接字。
compatibility(motherboard, processor)
compatibility(motherboard, ram)
compatibility(motherboard, vga)
compatibility(processor, ram)
【问题讨论】:
-
“最佳”在什么意义上?我建议遵循“生成测试”范式,您首先创建一个生成配置的生成器函数,然后使用确定配置是否合理的测试函数对其进行扩充。因此,请创建一个
configuration谓词来为您提供合法的配置,并创建某种score谓词来帮助您确定配置的好坏。 -
去年秋天我通过a similar problem 帮助了某人,以防万一。
-
除了Daniel提供的链接,你只需要整理你的想法和信息。首先,事实是什么?这些应该在您的程序中声明。我认为它们看起来像您在问题中显示的术语。您将拥有其中的许多,并且它们对应于具有特定价格等的不同特定品牌/型号的物品。然后,正如丹尼尔指出的那样,您需要确定“最佳”的含义。您将什么衡量为“最佳”?这就是必须翻译成 Prolog 规则(谓词/s)的内容。
-
@lurker 我已经编辑了第一篇文章,请看
-
目前还不清楚您如何定义“最佳”。 Daniel 建议使用
score谓词来评估配置并提供一些相对“好”配置的衡量标准。然后,您可以通过选择具有最高“好”分数的那个来选择“最佳”。例如,“最好”是由最高性能决定的,而不考虑成本吗?如果是这样,则需要根据您的事实评估绩效。