diff options
| author | Marius Peter <dev@marius-peter.com> | 2025-11-22 18:04:15 +0100 |
|---|---|---|
| committer | Marius Peter <dev@marius-peter.com> | 2025-11-22 18:04:15 +0100 |
| commit | fc9f74466d0b56a089f8b6d8aed870e0b943f092 (patch) | |
| tree | 20e97ae24e648eacb59f57353c2fa1fec6fce4f4 | |
| parent | f78ff6be3599c6a5fcac1eb62718c483499b1546 (diff) | |
Update nnls unit tests.
| -rw-r--r-- | services/nnls.rkt | 47 |
1 files changed, 25 insertions, 22 deletions
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))))))) |