[Racket] Ferti hydroponic nutrient solver, redux.
Update nnls unit tests.
services/nnls.rkt
@@ -70,7 +70,6 @@
70
70
(let ([max-j (argmax (λ (j) (colv-ref w j)) (set->list R))])
71
71
(values (colv-ref w max-j) max-j))))
72
72
73
Removed:
74
73
;; Build full candidate vector s from current P:
75
74
;; s_P = (A_Pᵀ A_P)⁻¹ A_Pᵀ y, s_R = 0
76
75
(define (make-s-from-P)
@@ -132,6 +131,7 @@
132
131
[(or (set-empty? P) (> min-sP 0))
133
132
(set! x s)
134
133
(outer-loop)]
134
Added:
135
135
[else
136
136
;; Compute α = min_{i in P, s_i <= 0} x_i / (x_i - s_i)
137
137
(define α
@@ -180,24 +180,27 @@
180
180
181
181
(define test-date "2025-01-01")
182
182
183
Removed:
(run-tests
184
Removed:
(test-suite "Nutrient measurement model"
185
Removed:
#:before
186
Removed:
(λ ()
187
Removed:
(connect! #:path 'memory)
188
Removed:
;; (connect! #:path "test.sqlite3")
189
Removed:
(migrate-all!)
183
Added:
(run-tests (test-suite "Nutrient measurement model"
184
Added:
#:before (λ ()
185
Added:
(connect! #:path 'memory)
186
Added:
;; (connect! #:path "test.sqlite3")
187
Added:
(migrate-all!)
190
188
191
Removed:
(define nitrogen (create-nutrient! "Nitrogen" "N"))
192
Removed:
(define phosphorus (create-nutrient! "Phosphorus" "P"))
189
Added:
(define nitrogen (create-nutrient! "Nitrogen" "N"))
190
Added:
(define phosphorus (create-nutrient! "Phosphorus" "P"))
193
191
194
Removed:
(create-nutrient-measurement! test-date `((,nitrogen . 0) (,phosphorus . 0)))
195
Removed:
(create-nutrient-target! test-date `((,nitrogen . 100) (,phosphorus . 50)))
192
Added:
(create-nutrient-measurement! test-date (hash nitrogen 0 phosphorus 0))
193
Added:
(create-nutrient-target! test-date (hash nitrogen 100 phosphorus 50))
196
194
197
Removed:
(create-fertilizer-product! "King Nitrogen" `((,nitrogen . 100)))
198
Removed:
(create-fertilizer-product! "Phosphorescent Baboon" `((,nitrogen . 10) (,phosphorus . 100)))
199
Removed:
(create-fertilizer-product! "John's Phosphorus" `((,nitrogen . 3) (,phosphorus . 30))))
200
Removed:
#:after (λ () (disconnect!))
195
Added:
(create-fertilizer-product! "Nitrogen" "King Nitrogen" (hash nitrogen 100))
196
Added:
(create-fertilizer-product! "Phosphorus"
197
Added:
"Phosphorescent Baboon"
198
Added:
(hash nitrogen 10 phosphorus 100))
199
Added:
(create-fertilizer-product! "Diluted phosphorus"
200
Added:
"John's Phosphorus"
201
Added:
(hash nitrogen 3 phosphorus 30)))
202
Added:
#:after (λ () (disconnect!))
201
203
202
Removed:
(test-case "Solve for NNLS"
203
Removed:
(displayln (format "Final solution for fertilizers is combination ~a" (find-ferti-recipe)))))))
204
Added:
(test-case "Solve for NNLS"
205
Added:
(displayln (format "Final solution for fertilizers is combination ~a"
206
Added:
(find-ferti-recipe)))))))