kbs 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/deploy-github-pages.yml +52 -0
- data/CHANGELOG.md +68 -2
- data/README.md +235 -334
- data/docs/DOCUMENTATION_STATUS.md +158 -0
- data/docs/advanced/custom-persistence.md +775 -0
- data/docs/advanced/debugging.md +726 -0
- data/docs/advanced/index.md +8 -0
- data/docs/advanced/performance.md +832 -0
- data/docs/advanced/testing.md +691 -0
- data/docs/api/blackboard.md +1157 -0
- data/docs/api/engine.md +978 -0
- data/docs/api/facts.md +1212 -0
- data/docs/api/index.md +12 -0
- data/docs/api/rules.md +1034 -0
- data/docs/architecture/blackboard.md +553 -0
- data/docs/architecture/index.md +277 -0
- data/docs/architecture/network-structure.md +343 -0
- data/docs/architecture/rete-algorithm.md +737 -0
- data/docs/assets/css/custom.css +83 -0
- data/docs/assets/images/blackboard-architecture.svg +136 -0
- data/docs/assets/images/compiled-network.svg +101 -0
- data/docs/assets/images/fact-assertion-flow.svg +117 -0
- data/docs/assets/images/kbs.jpg +0 -0
- data/docs/assets/images/pattern-matching-trace.svg +136 -0
- data/docs/assets/images/rete-network-layers.svg +96 -0
- data/docs/assets/images/system-layers.svg +69 -0
- data/docs/assets/images/trading-signal-network.svg +139 -0
- data/docs/assets/js/mathjax.js +17 -0
- data/docs/examples/expert-systems.md +1031 -0
- data/docs/examples/index.md +9 -0
- data/docs/examples/multi-agent.md +1335 -0
- data/docs/examples/stock-trading.md +488 -0
- data/docs/guides/blackboard-memory.md +558 -0
- data/docs/guides/dsl.md +1321 -0
- data/docs/guides/facts.md +652 -0
- data/docs/guides/getting-started.md +383 -0
- data/docs/guides/index.md +23 -0
- data/docs/guides/negation.md +529 -0
- data/docs/guides/pattern-matching.md +561 -0
- data/docs/guides/persistence.md +451 -0
- data/docs/guides/variable-binding.md +491 -0
- data/docs/guides/writing-rules.md +755 -0
- data/docs/index.md +157 -0
- data/docs/installation.md +156 -0
- data/docs/quick-start.md +228 -0
- data/examples/README.md +2 -2
- data/examples/advanced_example.rb +2 -2
- data/examples/advanced_example_dsl.rb +224 -0
- data/examples/ai_enhanced_kbs.rb +1 -1
- data/examples/ai_enhanced_kbs_dsl.rb +538 -0
- data/examples/blackboard_demo_dsl.rb +50 -0
- data/examples/car_diagnostic.rb +1 -1
- data/examples/car_diagnostic_dsl.rb +54 -0
- data/examples/concurrent_inference_demo.rb +5 -5
- data/examples/concurrent_inference_demo_dsl.rb +363 -0
- data/examples/csv_trading_system.rb +1 -1
- data/examples/csv_trading_system_dsl.rb +525 -0
- data/examples/knowledge_base.db +0 -0
- data/examples/portfolio_rebalancing_system.rb +2 -2
- data/examples/portfolio_rebalancing_system_dsl.rb +613 -0
- data/examples/redis_trading_demo_dsl.rb +177 -0
- data/examples/run_all.rb +50 -0
- data/examples/run_all_dsl.rb +49 -0
- data/examples/stock_trading_advanced.rb +1 -1
- data/examples/stock_trading_advanced_dsl.rb +404 -0
- data/examples/temp.txt +7693 -0
- data/examples/temp_dsl.txt +8447 -0
- data/examples/timestamped_trading.rb +1 -1
- data/examples/timestamped_trading_dsl.rb +258 -0
- data/examples/trading_demo.rb +1 -1
- data/examples/trading_demo_dsl.rb +322 -0
- data/examples/working_demo.rb +1 -1
- data/examples/working_demo_dsl.rb +160 -0
- data/lib/kbs/blackboard/engine.rb +3 -3
- data/lib/kbs/blackboard/fact.rb +1 -1
- data/lib/kbs/condition.rb +1 -1
- data/lib/kbs/dsl/knowledge_base.rb +1 -1
- data/lib/kbs/dsl/variable.rb +1 -1
- data/lib/kbs/{rete_engine.rb → engine.rb} +1 -1
- data/lib/kbs/fact.rb +1 -1
- data/lib/kbs/version.rb +1 -1
- data/lib/kbs.rb +2 -2
- data/mkdocs.yml +181 -0
- metadata +66 -6
- data/examples/stock_trading_system.rb.bak +0 -563
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require_relative '../lib/kbs/dsl'
|
|
4
|
+
include KBS::DSL::ConditionHelpers
|
|
5
|
+
|
|
6
|
+
# Define the knowledge base with rules
|
|
7
|
+
kb = KBS.knowledge_base do
|
|
8
|
+
# Rule 1: Simple stock momentum
|
|
9
|
+
rule "momentum_buy" do
|
|
10
|
+
on :stock, symbol: "AAPL"
|
|
11
|
+
|
|
12
|
+
perform do |facts, bindings|
|
|
13
|
+
stock = facts.find { |f| f.type == :stock }
|
|
14
|
+
puts "🚀 MOMENTUM SIGNAL: #{stock[:symbol]}"
|
|
15
|
+
puts " Price: $#{stock[:price]}"
|
|
16
|
+
puts " Volume: #{stock[:volume].to_s.reverse.scan(/\d{1,3}/).join(',').reverse}"
|
|
17
|
+
puts " Recommendation: BUY"
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Rule 2: High volume alert
|
|
22
|
+
rule "high_volume" do
|
|
23
|
+
on :stock do
|
|
24
|
+
volume greater_than(1000000)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
perform do |facts, bindings|
|
|
28
|
+
stock = facts.find { |f| f.type == :stock }
|
|
29
|
+
puts "📊 HIGH VOLUME ALERT: #{stock[:symbol]}"
|
|
30
|
+
puts " Volume: #{stock[:volume].to_s.reverse.scan(/\d{1,3}/).join(',').reverse}"
|
|
31
|
+
puts " Above 1M shares traded"
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Rule 3: Price movement
|
|
36
|
+
rule "price_movement" do
|
|
37
|
+
on :stock do
|
|
38
|
+
price_change satisfies { |p| p && p.abs > 2 }
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
perform do |facts, bindings|
|
|
42
|
+
stock = facts.find { |f| f.type == :stock }
|
|
43
|
+
direction = stock[:price_change] > 0 ? "UP" : "DOWN"
|
|
44
|
+
puts "📈 SIGNIFICANT MOVE: #{stock[:symbol]} #{direction}"
|
|
45
|
+
puts " Change: #{stock[:price_change] > 0 ? '+' : ''}#{stock[:price_change]}%"
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Rule 4: RSI signals
|
|
50
|
+
rule "rsi_signal" do
|
|
51
|
+
on :stock do
|
|
52
|
+
rsi satisfies { |r| r && (r < 30 || r > 70) }
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
perform do |facts, bindings|
|
|
56
|
+
stock = facts.find { |f| f.type == :stock }
|
|
57
|
+
condition = stock[:rsi] < 30 ? "OVERSOLD" : "OVERBOUGHT"
|
|
58
|
+
action = stock[:rsi] < 30 ? "BUY" : "SELL"
|
|
59
|
+
puts "⚡ RSI SIGNAL: #{stock[:symbol]} #{condition}"
|
|
60
|
+
puts " RSI: #{stock[:rsi].round(1)}"
|
|
61
|
+
puts " Recommendation: #{action}"
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Rule 5: Multi-condition golden cross
|
|
66
|
+
rule "golden_cross_complete" do
|
|
67
|
+
on :stock, symbol: "AAPL"
|
|
68
|
+
on :ma_signal, type: "golden_cross"
|
|
69
|
+
|
|
70
|
+
perform do |facts, bindings|
|
|
71
|
+
stock = facts.find { |f| f.type == :stock }
|
|
72
|
+
signal = facts.find { |f| f.type == :ma_signal }
|
|
73
|
+
puts "🌟 GOLDEN CROSS CONFIRMED: #{stock[:symbol]}"
|
|
74
|
+
puts " 50-day MA crossed above 200-day MA"
|
|
75
|
+
puts " Price: $#{stock[:price]}"
|
|
76
|
+
puts " Recommendation: STRONG BUY"
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def run_scenarios(kb)
|
|
82
|
+
puts "🏦 STOCK TRADING EXPERT SYSTEM"
|
|
83
|
+
puts "=" * 50
|
|
84
|
+
|
|
85
|
+
# Scenario 1: Apple momentum
|
|
86
|
+
puts "\n📊 SCENARIO 1: Apple with High Volume"
|
|
87
|
+
puts "-" * 30
|
|
88
|
+
kb.reset
|
|
89
|
+
kb.fact :stock, {
|
|
90
|
+
symbol: "AAPL",
|
|
91
|
+
price: 185.50,
|
|
92
|
+
volume: 1_500_000,
|
|
93
|
+
price_change: 3.2,
|
|
94
|
+
rsi: 68
|
|
95
|
+
}
|
|
96
|
+
kb.run
|
|
97
|
+
|
|
98
|
+
# Scenario 2: Google big move
|
|
99
|
+
puts "\n📊 SCENARIO 2: Google Big Price Move"
|
|
100
|
+
puts "-" * 30
|
|
101
|
+
kb.reset
|
|
102
|
+
kb.fact :stock, {
|
|
103
|
+
symbol: "GOOGL",
|
|
104
|
+
price: 142.80,
|
|
105
|
+
volume: 800_000,
|
|
106
|
+
price_change: -4.1,
|
|
107
|
+
rsi: 75
|
|
108
|
+
}
|
|
109
|
+
kb.run
|
|
110
|
+
|
|
111
|
+
# Scenario 3: Tesla oversold
|
|
112
|
+
puts "\n📊 SCENARIO 3: Tesla Oversold"
|
|
113
|
+
puts "-" * 30
|
|
114
|
+
kb.reset
|
|
115
|
+
kb.fact :stock, {
|
|
116
|
+
symbol: "TSLA",
|
|
117
|
+
price: 195.40,
|
|
118
|
+
volume: 2_200_000,
|
|
119
|
+
price_change: -1.8,
|
|
120
|
+
rsi: 25
|
|
121
|
+
}
|
|
122
|
+
kb.run
|
|
123
|
+
|
|
124
|
+
# Scenario 4: Apple Golden Cross
|
|
125
|
+
puts "\n📊 SCENARIO 4: Apple Golden Cross"
|
|
126
|
+
puts "-" * 30
|
|
127
|
+
kb.reset
|
|
128
|
+
kb.fact :stock, {
|
|
129
|
+
symbol: "AAPL",
|
|
130
|
+
price: 190.25,
|
|
131
|
+
volume: 1_100_000,
|
|
132
|
+
price_change: 2.1,
|
|
133
|
+
rsi: 55
|
|
134
|
+
}
|
|
135
|
+
kb.fact :ma_signal, {
|
|
136
|
+
symbol: "AAPL",
|
|
137
|
+
type: "golden_cross"
|
|
138
|
+
}
|
|
139
|
+
kb.run
|
|
140
|
+
|
|
141
|
+
# Scenario 5: Multiple signals
|
|
142
|
+
puts "\n📊 SCENARIO 5: NVIDIA Multiple Signals"
|
|
143
|
+
puts "-" * 30
|
|
144
|
+
kb.reset
|
|
145
|
+
kb.fact :stock, {
|
|
146
|
+
symbol: "NVDA",
|
|
147
|
+
price: 425.80,
|
|
148
|
+
volume: 3_500_000,
|
|
149
|
+
price_change: 8.7,
|
|
150
|
+
rsi: 78
|
|
151
|
+
}
|
|
152
|
+
kb.run
|
|
153
|
+
|
|
154
|
+
puts "\n" + "=" * 50
|
|
155
|
+
puts "DEMONSTRATION COMPLETE"
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
if __FILE__ == $0
|
|
159
|
+
run_scenarios(kb)
|
|
160
|
+
end
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative '../
|
|
3
|
+
require_relative '../engine'
|
|
4
4
|
require_relative 'memory'
|
|
5
5
|
|
|
6
6
|
module KBS
|
|
7
7
|
module Blackboard
|
|
8
|
-
#
|
|
9
|
-
class Engine <
|
|
8
|
+
# KBS engine integrated with Blackboard memory
|
|
9
|
+
class Engine < KBS::Engine
|
|
10
10
|
attr_reader :blackboard
|
|
11
11
|
|
|
12
12
|
def initialize(db_path: ':memory:', store: nil)
|
data/lib/kbs/blackboard/fact.rb
CHANGED
|
@@ -39,7 +39,7 @@ module KBS
|
|
|
39
39
|
|
|
40
40
|
if value.is_a?(Proc)
|
|
41
41
|
return false unless @attributes[key] && value.call(@attributes[key])
|
|
42
|
-
elsif value.is_a?(Symbol) && value.to_s.
|
|
42
|
+
elsif value.is_a?(Symbol) && value.to_s.end_with?('?')
|
|
43
43
|
next
|
|
44
44
|
else
|
|
45
45
|
return false unless @attributes[key] == value
|
data/lib/kbs/condition.rb
CHANGED
data/lib/kbs/dsl/variable.rb
CHANGED
data/lib/kbs/fact.rb
CHANGED
|
@@ -26,7 +26,7 @@ module KBS
|
|
|
26
26
|
|
|
27
27
|
if value.is_a?(Proc)
|
|
28
28
|
return false unless @attributes[key] && value.call(@attributes[key])
|
|
29
|
-
elsif value.is_a?(Symbol) && value.to_s.
|
|
29
|
+
elsif value.is_a?(Symbol) && value.to_s.end_with?('?')
|
|
30
30
|
next
|
|
31
31
|
else
|
|
32
32
|
return false unless @attributes[key] == value
|
data/lib/kbs/version.rb
CHANGED
data/lib/kbs.rb
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
require_relative "kbs/version"
|
|
4
4
|
|
|
5
|
-
# Core RETE
|
|
5
|
+
# Core RETE classes
|
|
6
6
|
require_relative "kbs/fact"
|
|
7
7
|
require_relative "kbs/working_memory"
|
|
8
8
|
require_relative "kbs/token"
|
|
@@ -13,7 +13,7 @@ require_relative "kbs/negation_node"
|
|
|
13
13
|
require_relative "kbs/production_node"
|
|
14
14
|
require_relative "kbs/condition"
|
|
15
15
|
require_relative "kbs/rule"
|
|
16
|
-
require_relative "kbs/
|
|
16
|
+
require_relative "kbs/engine"
|
|
17
17
|
|
|
18
18
|
module KBS
|
|
19
19
|
class Error < StandardError; end
|
data/mkdocs.yml
ADDED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# MkDocs Configuration for KBS Documentation
|
|
2
|
+
site_name: KBS - Knowledge-Based Systems for Ruby
|
|
3
|
+
site_description: A Ruby implementation of the RETE algorithm for production rule systems with persistent blackboard memory
|
|
4
|
+
site_author: Dewayne VanHoozer
|
|
5
|
+
site_url: https://madbomber.github.io/kbs
|
|
6
|
+
copyright: Copyright © 2024 Dewayne VanHoozer
|
|
7
|
+
|
|
8
|
+
# Repository information
|
|
9
|
+
repo_name: madbomber/kbs
|
|
10
|
+
repo_url: https://github.com/madbomber/kbs
|
|
11
|
+
edit_uri: edit/main/docs/
|
|
12
|
+
|
|
13
|
+
# Configuration
|
|
14
|
+
theme:
|
|
15
|
+
name: material
|
|
16
|
+
|
|
17
|
+
# Color scheme - Default to light mode
|
|
18
|
+
palette:
|
|
19
|
+
# Palette toggle for light mode (default)
|
|
20
|
+
- scheme: default
|
|
21
|
+
primary: deep purple
|
|
22
|
+
accent: purple
|
|
23
|
+
toggle:
|
|
24
|
+
icon: material/brightness-7
|
|
25
|
+
name: Switch to dark mode
|
|
26
|
+
|
|
27
|
+
# Palette toggle for dark mode
|
|
28
|
+
- scheme: slate
|
|
29
|
+
primary: deep purple
|
|
30
|
+
accent: purple
|
|
31
|
+
toggle:
|
|
32
|
+
icon: material/brightness-4
|
|
33
|
+
name: Switch to light mode
|
|
34
|
+
|
|
35
|
+
# Typography
|
|
36
|
+
font:
|
|
37
|
+
text: Roboto
|
|
38
|
+
code: Roboto Mono
|
|
39
|
+
|
|
40
|
+
# Theme features
|
|
41
|
+
features:
|
|
42
|
+
# Navigation
|
|
43
|
+
- navigation.instant
|
|
44
|
+
- navigation.tracking
|
|
45
|
+
- navigation.tabs
|
|
46
|
+
- navigation.tabs.sticky
|
|
47
|
+
- navigation.sections
|
|
48
|
+
- navigation.path
|
|
49
|
+
- navigation.indexes
|
|
50
|
+
- navigation.top
|
|
51
|
+
|
|
52
|
+
# Table of contents
|
|
53
|
+
- toc.follow
|
|
54
|
+
|
|
55
|
+
# Search
|
|
56
|
+
- search.suggest
|
|
57
|
+
- search.highlight
|
|
58
|
+
- search.share
|
|
59
|
+
|
|
60
|
+
# Header
|
|
61
|
+
- header.autohide
|
|
62
|
+
|
|
63
|
+
# Content
|
|
64
|
+
- content.code.copy
|
|
65
|
+
- content.code.annotate
|
|
66
|
+
- content.tabs.link
|
|
67
|
+
- content.tooltips
|
|
68
|
+
- content.action.edit
|
|
69
|
+
- content.action.view
|
|
70
|
+
|
|
71
|
+
# Plugins
|
|
72
|
+
plugins:
|
|
73
|
+
- search:
|
|
74
|
+
separator: '[\s\-,:!=\[\]()"`/]+|\.(?!\d)|&[lg]t;|(?!\b)(?=[A-Z][a-z])'
|
|
75
|
+
|
|
76
|
+
# Extensions
|
|
77
|
+
markdown_extensions:
|
|
78
|
+
# Python Markdown
|
|
79
|
+
- abbr
|
|
80
|
+
- admonition
|
|
81
|
+
- attr_list
|
|
82
|
+
- def_list
|
|
83
|
+
- footnotes
|
|
84
|
+
- md_in_html
|
|
85
|
+
- toc:
|
|
86
|
+
permalink: true
|
|
87
|
+
title: On this page
|
|
88
|
+
|
|
89
|
+
# Python Markdown Extensions
|
|
90
|
+
- pymdownx.arithmatex:
|
|
91
|
+
generic: true
|
|
92
|
+
- pymdownx.betterem:
|
|
93
|
+
smart_enable: all
|
|
94
|
+
- pymdownx.caret
|
|
95
|
+
- pymdownx.details
|
|
96
|
+
- pymdownx.emoji:
|
|
97
|
+
emoji_generator: !!python/name:material.extensions.emoji.to_svg
|
|
98
|
+
emoji_index: !!python/name:material.extensions.emoji.twemoji
|
|
99
|
+
- pymdownx.highlight:
|
|
100
|
+
anchor_linenums: true
|
|
101
|
+
line_spans: __span
|
|
102
|
+
pygments_lang_class: true
|
|
103
|
+
- pymdownx.inlinehilite
|
|
104
|
+
- pymdownx.keys
|
|
105
|
+
- pymdownx.magiclink:
|
|
106
|
+
repo_url_shorthand: true
|
|
107
|
+
user: madbomber
|
|
108
|
+
repo: kbs
|
|
109
|
+
- pymdownx.mark
|
|
110
|
+
- pymdownx.smartsymbols
|
|
111
|
+
- pymdownx.superfences:
|
|
112
|
+
custom_fences:
|
|
113
|
+
- name: mermaid
|
|
114
|
+
class: mermaid
|
|
115
|
+
format: !!python/name:pymdownx.superfences.fence_code_format
|
|
116
|
+
- pymdownx.tabbed:
|
|
117
|
+
alternate_style: true
|
|
118
|
+
- pymdownx.tasklist:
|
|
119
|
+
custom_checkbox: true
|
|
120
|
+
- pymdownx.tilde
|
|
121
|
+
|
|
122
|
+
# Extra CSS and JavaScript
|
|
123
|
+
extra_css:
|
|
124
|
+
- assets/css/custom.css
|
|
125
|
+
|
|
126
|
+
extra_javascript:
|
|
127
|
+
- assets/js/mathjax.js
|
|
128
|
+
- https://polyfill.io/v3/polyfill.min.js?features=es6
|
|
129
|
+
- https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js
|
|
130
|
+
|
|
131
|
+
# Social media and extra configuration
|
|
132
|
+
extra:
|
|
133
|
+
social:
|
|
134
|
+
- icon: fontawesome/brands/github
|
|
135
|
+
link: https://github.com/madbomber/kbs
|
|
136
|
+
name: KBS on GitHub
|
|
137
|
+
- icon: fontawesome/solid/gem
|
|
138
|
+
link: https://rubygems.org/gems/kbs
|
|
139
|
+
name: KBS on RubyGems
|
|
140
|
+
|
|
141
|
+
version:
|
|
142
|
+
provider: mike
|
|
143
|
+
|
|
144
|
+
# Navigation
|
|
145
|
+
nav:
|
|
146
|
+
- Home: index.md
|
|
147
|
+
- Installation: installation.md
|
|
148
|
+
- Quick Start: quick-start.md
|
|
149
|
+
- Architecture:
|
|
150
|
+
- architecture/index.md
|
|
151
|
+
- RETE Algorithm: architecture/rete-algorithm.md
|
|
152
|
+
- Blackboard System: architecture/blackboard.md
|
|
153
|
+
- Network Structure: architecture/network-structure.md
|
|
154
|
+
- Guides:
|
|
155
|
+
- guides/index.md
|
|
156
|
+
- Getting Started: guides/getting-started.md
|
|
157
|
+
- Writing Rules: guides/writing-rules.md
|
|
158
|
+
- DSL Reference: guides/dsl.md
|
|
159
|
+
- Working with Facts: guides/facts.md
|
|
160
|
+
- Pattern Matching: guides/pattern-matching.md
|
|
161
|
+
- Variable Binding: guides/variable-binding.md
|
|
162
|
+
- Negation: guides/negation.md
|
|
163
|
+
- Blackboard Memory: guides/blackboard-memory.md
|
|
164
|
+
- Persistence Options: guides/persistence.md
|
|
165
|
+
- Examples:
|
|
166
|
+
- examples/index.md
|
|
167
|
+
- Stock Trading: examples/stock-trading.md
|
|
168
|
+
- Expert Systems: examples/expert-systems.md
|
|
169
|
+
- Multi-Agent Systems: examples/multi-agent.md
|
|
170
|
+
- Advanced:
|
|
171
|
+
- advanced/index.md
|
|
172
|
+
- Performance Tuning: advanced/performance.md
|
|
173
|
+
- Custom Persistence: advanced/custom-persistence.md
|
|
174
|
+
- Debugging: advanced/debugging.md
|
|
175
|
+
- Testing Rules: advanced/testing.md
|
|
176
|
+
- API Reference:
|
|
177
|
+
- api/index.md
|
|
178
|
+
- ReteEngine: api/engine.md
|
|
179
|
+
- Facts: api/facts.md
|
|
180
|
+
- Rules: api/rules.md
|
|
181
|
+
- Blackboard: api/blackboard.md
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kbs
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0
|
|
4
|
+
version: 0.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Dewayne VanHoozer
|
|
@@ -68,7 +68,7 @@ dependencies:
|
|
|
68
68
|
description: |
|
|
69
69
|
A comprehensive Ruby implementation of a Knowledge-Based System featuring:
|
|
70
70
|
|
|
71
|
-
• RETE
|
|
71
|
+
• RETE Algorithm: Optimized forward-chaining inference engine with unlinking optimization for high-performance pattern matching
|
|
72
72
|
• Declarative DSL: Readable, expressive syntax for rule definition with built-in condition helpers
|
|
73
73
|
• Blackboard Architecture: Multi-agent coordination with message passing and knowledge source registration
|
|
74
74
|
• Flexible Persistence: SQLite (durable), Redis (fast), and hybrid storage backends with audit trails
|
|
@@ -84,27 +84,86 @@ extensions: []
|
|
|
84
84
|
extra_rdoc_files: []
|
|
85
85
|
files:
|
|
86
86
|
- ".envrc"
|
|
87
|
+
- ".github/workflows/deploy-github-pages.yml"
|
|
87
88
|
- CHANGELOG.md
|
|
88
89
|
- COMMITS.md
|
|
89
90
|
- LICENSE.txt
|
|
90
91
|
- README.md
|
|
91
92
|
- Rakefile
|
|
93
|
+
- docs/DOCUMENTATION_STATUS.md
|
|
94
|
+
- docs/advanced/custom-persistence.md
|
|
95
|
+
- docs/advanced/debugging.md
|
|
96
|
+
- docs/advanced/index.md
|
|
97
|
+
- docs/advanced/performance.md
|
|
98
|
+
- docs/advanced/testing.md
|
|
99
|
+
- docs/api/blackboard.md
|
|
100
|
+
- docs/api/engine.md
|
|
101
|
+
- docs/api/facts.md
|
|
102
|
+
- docs/api/index.md
|
|
103
|
+
- docs/api/rules.md
|
|
104
|
+
- docs/architecture/blackboard.md
|
|
105
|
+
- docs/architecture/index.md
|
|
106
|
+
- docs/architecture/network-structure.md
|
|
107
|
+
- docs/architecture/rete-algorithm.md
|
|
108
|
+
- docs/assets/css/custom.css
|
|
109
|
+
- docs/assets/images/blackboard-architecture.svg
|
|
110
|
+
- docs/assets/images/compiled-network.svg
|
|
111
|
+
- docs/assets/images/fact-assertion-flow.svg
|
|
112
|
+
- docs/assets/images/kbs.jpg
|
|
113
|
+
- docs/assets/images/pattern-matching-trace.svg
|
|
114
|
+
- docs/assets/images/rete-network-layers.svg
|
|
115
|
+
- docs/assets/images/system-layers.svg
|
|
116
|
+
- docs/assets/images/trading-signal-network.svg
|
|
117
|
+
- docs/assets/js/mathjax.js
|
|
118
|
+
- docs/examples/expert-systems.md
|
|
119
|
+
- docs/examples/index.md
|
|
120
|
+
- docs/examples/multi-agent.md
|
|
121
|
+
- docs/examples/stock-trading.md
|
|
122
|
+
- docs/guides/blackboard-memory.md
|
|
123
|
+
- docs/guides/dsl.md
|
|
124
|
+
- docs/guides/facts.md
|
|
125
|
+
- docs/guides/getting-started.md
|
|
126
|
+
- docs/guides/index.md
|
|
127
|
+
- docs/guides/negation.md
|
|
128
|
+
- docs/guides/pattern-matching.md
|
|
129
|
+
- docs/guides/persistence.md
|
|
130
|
+
- docs/guides/variable-binding.md
|
|
131
|
+
- docs/guides/writing-rules.md
|
|
132
|
+
- docs/index.md
|
|
133
|
+
- docs/installation.md
|
|
134
|
+
- docs/quick-start.md
|
|
92
135
|
- examples/README.md
|
|
93
136
|
- examples/advanced_example.rb
|
|
137
|
+
- examples/advanced_example_dsl.rb
|
|
94
138
|
- examples/ai_enhanced_kbs.rb
|
|
139
|
+
- examples/ai_enhanced_kbs_dsl.rb
|
|
95
140
|
- examples/blackboard_demo.rb
|
|
141
|
+
- examples/blackboard_demo_dsl.rb
|
|
96
142
|
- examples/car_diagnostic.rb
|
|
143
|
+
- examples/car_diagnostic_dsl.rb
|
|
97
144
|
- examples/concurrent_inference_demo.rb
|
|
145
|
+
- examples/concurrent_inference_demo_dsl.rb
|
|
98
146
|
- examples/csv_trading_system.rb
|
|
147
|
+
- examples/csv_trading_system_dsl.rb
|
|
99
148
|
- examples/iot_demo_using_dsl.rb
|
|
149
|
+
- examples/knowledge_base.db
|
|
100
150
|
- examples/portfolio_rebalancing_system.rb
|
|
151
|
+
- examples/portfolio_rebalancing_system_dsl.rb
|
|
101
152
|
- examples/redis_trading_demo.rb
|
|
153
|
+
- examples/redis_trading_demo_dsl.rb
|
|
154
|
+
- examples/run_all.rb
|
|
155
|
+
- examples/run_all_dsl.rb
|
|
102
156
|
- examples/sample_stock_data.csv
|
|
103
157
|
- examples/stock_trading_advanced.rb
|
|
104
|
-
- examples/
|
|
158
|
+
- examples/stock_trading_advanced_dsl.rb
|
|
159
|
+
- examples/temp.txt
|
|
160
|
+
- examples/temp_dsl.txt
|
|
105
161
|
- examples/timestamped_trading.rb
|
|
162
|
+
- examples/timestamped_trading_dsl.rb
|
|
106
163
|
- examples/trading_demo.rb
|
|
164
|
+
- examples/trading_demo_dsl.rb
|
|
107
165
|
- examples/working_demo.rb
|
|
166
|
+
- examples/working_demo_dsl.rb
|
|
108
167
|
- lib/kbs.rb
|
|
109
168
|
- lib/kbs/alpha_memory.rb
|
|
110
169
|
- lib/kbs/beta_memory.rb
|
|
@@ -127,15 +186,16 @@ files:
|
|
|
127
186
|
- lib/kbs/dsl/pattern_evaluator.rb
|
|
128
187
|
- lib/kbs/dsl/rule_builder.rb
|
|
129
188
|
- lib/kbs/dsl/variable.rb
|
|
189
|
+
- lib/kbs/engine.rb
|
|
130
190
|
- lib/kbs/fact.rb
|
|
131
191
|
- lib/kbs/join_node.rb
|
|
132
192
|
- lib/kbs/negation_node.rb
|
|
133
193
|
- lib/kbs/production_node.rb
|
|
134
|
-
- lib/kbs/rete_engine.rb
|
|
135
194
|
- lib/kbs/rule.rb
|
|
136
195
|
- lib/kbs/token.rb
|
|
137
196
|
- lib/kbs/version.rb
|
|
138
197
|
- lib/kbs/working_memory.rb
|
|
198
|
+
- mkdocs.yml
|
|
139
199
|
homepage: https://github.com/madbomber/kbs
|
|
140
200
|
licenses:
|
|
141
201
|
- MIT
|
|
@@ -159,6 +219,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
159
219
|
requirements: []
|
|
160
220
|
rubygems_version: 3.7.2
|
|
161
221
|
specification_version: 4
|
|
162
|
-
summary:
|
|
163
|
-
|
|
222
|
+
summary: Knowledge-Based System with RETE inference, Blackboard architecture, and
|
|
223
|
+
AI integration
|
|
164
224
|
test_files: []
|