【发布时间】:2016-01-05 15:12:03
【问题描述】:
我正在使用剪辑框架来构建专家系统。但是,我在使用 atm 时遇到了内存问题,这将使它不适合我的任务。那么问题来了:
它按预期生成 144 个 SpinWave 事实,总共大约 150 个事实。每个事实不应包含超过一堆整数(大约 15 个)。 CLIPS 使用大约 6mio 内存请求消耗 1GB 内存。我有点困惑为什么它会分配这么多内存......有人可以指出我正确的方向或给出解释。我正在使用的代码如下。提前致谢!
史蒂夫
; define helicity wave final or initial state template
(deftemplate SpinWaveMultiplet
(slot unique_id (type INTEGER))
(slot charge (type INTEGER))
(slot isospin_num (type INTEGER))
(slot isospin_denom (type INTEGER))
(slot isospin_z_num (type INTEGER))
(slot spin_num (type INTEGER))
(slot spin_denom (type INTEGER))
; we have multislot of spin z to allow for specific components
; in the initial or final state
(multislot spin_z_num)
(slot parity (type INTEGER))
(slot cparity (type INTEGER))
)
; define spin wave
(deftemplate SpinWave
(slot unique_id (type INTEGER))
(slot charge (type INTEGER))
(slot isospin_num (type INTEGER))
(slot isospin_denom (type INTEGER))
(slot isospin_z_num (type INTEGER))
(slot spin_num (type INTEGER))
(slot spin_denom (type INTEGER))
(slot spin_z_num (type INTEGER))
(slot parity (type INTEGER))
(slot cparity (type INTEGER))
)
; allowed intermediate state spins
(deffacts user-conditions
(AllowedQN
(spin_nums 0 1 2) (spin_denom 1 ) (isospin_nums 0 1) (isospin_denom 1)
(charge 0) (parity -1 1) (cparity -1 1)
)
)
(deffacts initial-state
(SpinWaveMultiplet (unique_id 0) (spin_num 1) (spin_denom 1) (spin_z_num -1 1)
(isospin_num 0) (isospin_denom 1) (isospin_z_num 0)
)
)
(deffacts final-state-list
(SpinWaveMultiplet (unique_id 1) (spin_num 1) (spin_denom 1) (spin_z_num -1 1)
(isospin_num 0) (isospin_denom 1) (isospin_z_num 0)
)
(SpinWaveMultiplet (unique_id 2) (spin_num 0) (spin_denom 1) (spin_z_num 0)
(isospin_num 1) (isospin_denom 1) (isospin_z_num 0)
)
(SpinWaveMultiplet (unique_id 3) (spin_num 0) (spin_denom 1) (spin_z_num 0)
(isospin_num 1) (isospin_denom 1) (isospin_z_num 0)
)
)
; create all spin waves
(defrule create-initial-spin-waves
(AllowedQN
(spin_nums $?spin_nums) (spin_denom ?spin_denom)
(isospin_nums $?isospin_nums) (isospin_denom ?isospin_denom)
(charge $?charges)
(parity $?parities)
(cparity $?cparities)
)
=>
(foreach ?charge ?charges
(foreach ?parity ?parities
(foreach ?cparity ?cparities
(foreach ?isospin_num ?isospin_nums
(bind ?isospin_z_num (* -1 ?isospin_num))
(while (<= ?isospin_z_num ?isospin_num)
(foreach ?spin_num ?spin_nums
(bind ?spin_z_num (* -1 ?spin_num))
(while (<= ?spin_z_num ?spin_num)
(assert
(SpinWave (unique_id ?*total_unique_id_counter*)
(spin_num ?spin_num) (spin_denom ?spin_denom) (spin_z_num ?spin_z_num)
(isospin_num ?isospin_num) (isospin_denom ?isospin_denom) (isospin_z_num ?isospin_z_num)
(charge ?charge) (parity ?parity) (cparity ?cparity)
)
)
(bind ?*total_unique_id_counter* (+ ?*total_unique_id_counter* 1))
(bind ?spin_z_num (+ ?spin_z_num ?spin_denom))
)
)
(bind ?isospin_z_num (+ ?isospin_z_num ?isospin_denom))
)
)
)
)
)
)
【问题讨论】:
标签: memory clips consumption