From fc9f74466d0b56a089f8b6d8aed870e0b943f092 Mon Sep 17 00:00:00 2001 From: Marius Peter Date: Sat, 22 Nov 2025 18:04:15 +0100 Subject: Update nnls unit tests. --- services/nnls.rkt | 47 +++++++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 22 deletions(-) (limited to 'services/nnls.rkt') diff --git a/services/nnls.rkt b/services/nnls.rkt index 898072c..90acb41 100644 --- a/services/nnls.rkt +++ b/services/nnls.rkt @@ -70,7 +70,6 @@ (let ([max-j (argmax (λ (j) (colv-ref w j)) (set->list R))]) (values (colv-ref w max-j) max-j)))) - ;; Build full candidate vector s from current P: ;; s_P = (A_Pᵀ A_P)⁻¹ A_Pᵀ y, s_R = 0 (define (make-s-from-P) @@ -132,6 +131,7 @@ [(or (set-empty? P) (> min-sP 0)) (set! x s) (outer-loop)] + [else ;; Compute α = min_{i in P, s_i <= 0} x_i / (x_i - s_i) (define α @@ -180,24 +180,27 @@ (define test-date "2025-01-01") - (run-tests - (test-suite "Nutrient measurement model" - #:before - (λ () - (connect! #:path 'memory) - ;; (connect! #:path "test.sqlite3") - (migrate-all!) - - (define nitrogen (create-nutrient! "Nitrogen" "N")) - (define phosphorus (create-nutrient! "Phosphorus" "P")) - - (create-nutrient-measurement! test-date `((,nitrogen . 0) (,phosphorus . 0))) - (create-nutrient-target! test-date `((,nitrogen . 100) (,phosphorus . 50))) - - (create-fertilizer-product! "King Nitrogen" `((,nitrogen . 100))) - (create-fertilizer-product! "Phosphorescent Baboon" `((,nitrogen . 10) (,phosphorus . 100))) - (create-fertilizer-product! "John's Phosphorus" `((,nitrogen . 3) (,phosphorus . 30)))) - #:after (λ () (disconnect!)) - - (test-case "Solve for NNLS" - (displayln (format "Final solution for fertilizers is combination ~a" (find-ferti-recipe))))))) + (run-tests (test-suite "Nutrient measurement model" + #:before (λ () + (connect! #:path 'memory) + ;; (connect! #:path "test.sqlite3") + (migrate-all!) + + (define nitrogen (create-nutrient! "Nitrogen" "N")) + (define phosphorus (create-nutrient! "Phosphorus" "P")) + + (create-nutrient-measurement! test-date (hash nitrogen 0 phosphorus 0)) + (create-nutrient-target! test-date (hash nitrogen 100 phosphorus 50)) + + (create-fertilizer-product! "Nitrogen" "King Nitrogen" (hash nitrogen 100)) + (create-fertilizer-product! "Phosphorus" + "Phosphorescent Baboon" + (hash nitrogen 10 phosphorus 100)) + (create-fertilizer-product! "Diluted phosphorus" + "John's Phosphorus" + (hash nitrogen 3 phosphorus 30))) + #:after (λ () (disconnect!)) + + (test-case "Solve for NNLS" + (displayln (format "Final solution for fertilizers is combination ~a" + (find-ferti-recipe))))))) -- cgit v1.2.3