artdag: Phase 7 cost-directed opt-improvement/opt-cheaper? + 5 tests
artdag/opt-improvement compares the original output cone (dce to id) vs the maude-reduced DAG under an injected cost-fn, returning before/after total-work and critical-path. opt-cheaper? asserts optimisation never increases cost: the 5-node chain drops to 2 (work 5->2, path 5->2) and stays cheaper under radius-weighted cost (5->3); over dedup and untouched DAGs are never pessimised. Consumes cost.sx. Phase 7 base + (later) cost box done. maude-optimize 38/38, total 196/196. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -268,3 +268,36 @@
|
||||
(artdag/node-params
|
||||
(artdag/dag-get mo-plain-opt (artdag/opt-last (artdag/dag-order mo-plain-opt))))
|
||||
{:radius 3})
|
||||
|
||||
; ---- cost-directed: optimisation never increases cost ----
|
||||
|
||||
(define
|
||||
mo-rcost
|
||||
(fn (op params) (if (= op "blur") (max 1 (get params :radius)) 1)))
|
||||
|
||||
(artdag-test
|
||||
"opt-improvement: const-cost total work drops on fused chain"
|
||||
(let ((imp (artdag/opt-improvement mo-chain5 mo-chain5-id artdag/const-cost)))
|
||||
(list (get imp :before) (get imp :after)))
|
||||
(list 5 2))
|
||||
|
||||
(artdag-test
|
||||
"opt-improvement: critical path shrinks under const cost"
|
||||
(let ((imp (artdag/opt-improvement mo-chain5 mo-chain5-id artdag/const-cost)))
|
||||
(< (get imp :after-path) (get imp :before-path)))
|
||||
true)
|
||||
|
||||
(artdag-test
|
||||
"opt-cheaper?: fused chain is cheaper under radius-weighted cost"
|
||||
(artdag/opt-cheaper? mo-chain5 mo-chain5-id mo-rcost)
|
||||
true)
|
||||
|
||||
(artdag-test
|
||||
"opt-cheaper?: over dedup is cheaper"
|
||||
(artdag/opt-cheaper? mo-dedup mo-dedup-id artdag/const-cost)
|
||||
true)
|
||||
|
||||
(artdag-test
|
||||
"opt-cheaper?: untouched DAG keeps equal cost (never a pessimisation)"
|
||||
(artdag/opt-cheaper? mo-plain mo-plain-id artdag/const-cost)
|
||||
true)
|
||||
|
||||
Reference in New Issue
Block a user