[Jprogramming] odometer / optimization problem

Henry Rich HenryHRich at nc.rr.com
Wed Apr 8 09:12:41 UTC 2015


Look at amoeba.ijs in math/misc.

Henry Rich

On 4/7/2015 10:53 PM, Joe Bogner wrote:
> I have an optimization problem that I figured I'd try solving with J
>
> I have a set of data with a target, multiplier, and weight. I'd like to
> calculate 4 multipliers that minimize the error from the current weighted
> value = ( target * multiplier * weight);
>
> In other words, I want to essentially fit 4 values to the existing
> population
>
> I can calculate 2 quickly and 3 takes about 3-4 minutes. I think 4 may take
> hours
>
> This is a brute force method, so I'm interested in alternatives... either
> in J or some other software. I'm not familiar enough with this class of
> problem to search for other solutions effectively
>
> Thank you for ideas
>
> odometer =: #: i.@(*/)
> NB. my range of values are constrained to 0 to 1 in hundredths
> nums=:(odometer 100 100 100)
> nums=:100%~nums
>
> NB. sample dataset has 10,000 rows to fit
> N=:10000
>
> NB. sample data has 4 populations, which have slightly different
> distributions
> gi=:(?.N#4)
> g=:'ABCD' {~ gi
>
> NB. maximum value
> l=:(?.N#100)
>
> NB. group a-d range of multipliers
> Ar=:(?.N#20)
> Br=:(?.N#50)
> Cr=:(?.N#70)
> Dr=:(?.N#90)
>
> NB. some weights
> w=:(?.N#10000)
>
> NB. select multiplier depending on A,B,C,D
> NB. there must be a better way to do this
> NB. ideally something like
> NB. (Ar,.Br,.Cr,.Dr,.gi) {~"1 gi
> lm =: 100 %~ ; ({~ 4&{"1) each <"1 (Ar,.Br,.Cr,.Dr,.gi)
>
> NB. weighted value
> p=: l*lm*w
> NB. total of all weighted values
> tp=: +/ p
>
>
> NB. cost function
> cost=: 3 : 0
> NB. find the odometer multiplier closest to the current
> flm=: lm ((],&0) {~ ([ I.~ ])) y
> ((tp-(+/ l*flm*w))^2),y
> )
> costs=. cost"1 nums
>
> NB. best 5
> best5=.(5 {. (/: (0{"1 costs))) { costs
>
> NB. re-run best
> cost 1}.  0{::best5
>
>
>
> The best two values are 0.26 and 0.51
> The best three values are 0.18 0.46 and 0.57
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>


More information about the Programming mailing list