is early and is late in bko

We can use a similar construct to that we recently used for is-teenager, and is-adult, to implement is-early and is-late. For example sake, assume:
is-early: 3:30 -> 7:00
is-late: 10:30 -> 3:30
-- learn this:
is-early |time: 24h: *> #=> do-you-know drop-above[700] drop-below[330] pop-float |_self>
is-late |time: 24h: *> #=> do-you-know (drop-below[2230] pop-float |_self> + drop-above[330] pop-float |_self>)

-- now test it:
-- learn a list of times:
|24h times> => range(|time: 24h: 100>,|time: 24h: 2400>,|100>)

-- pretty print a table:
sa: table[24h-time,is-early,is-late] "" |24h times>
+-----------------+----------+---------+
| 24h-time        | is-early | is-late |
+-----------------+----------+---------+
| time: 24h: 100  | no       | yes     |
| time: 24h: 200  | no       | yes     |
| time: 24h: 300  | no       | yes     |
| time: 24h: 400  | yes      | no      |
| time: 24h: 500  | yes      | no      |
| time: 24h: 600  | yes      | no      |
| time: 24h: 700  | yes      | no      |
| time: 24h: 800  | no       | no      |
| time: 24h: 900  | no       | no      |
| time: 24h: 1000 | no       | no      |
| time: 24h: 1100 | no       | no      |
| time: 24h: 1200 | no       | no      |
| time: 24h: 1300 | no       | no      |
| time: 24h: 1400 | no       | no      |
| time: 24h: 1500 | no       | no      |
| time: 24h: 1600 | no       | no      |
| time: 24h: 1700 | no       | no      |
| time: 24h: 1800 | no       | no      |
| time: 24h: 1900 | no       | no      |
| time: 24h: 2000 | no       | no      |
| time: 24h: 2100 | no       | no      |
| time: 24h: 2200 | no       | no      |
| time: 24h: 2300 | no       | yes     |
| time: 24h: 2400 | no       | yes     |
+-----------------+----------+---------+
So, that works and all. I guess a thing to note is we can rewrite our learn rules using the in-range sigmoid and the drop function, instead of drop-above and drop-below. Simply enough:
range-is-early |time: 24h: *> #=> do-you-know drop sigmoid-in-range[330,700] pop-float |_self>
range-is-late |time: 24h: *> #=> do-you-know drop (sigmoid-in-range[2230,2400] pop-float |_self> + sigmoid-in-range[0,330] pop-float |_self>)

-- now look at the resulting table:
-- (we see they essentially agree)
sa: table[24h-time,is-early,range-is-early,is-late,range-is-late] "" |24h times>
+-----------------+----------+----------------+---------+---------------+
| 24h-time        | is-early | range-is-early | is-late | range-is-late |
+-----------------+----------+----------------+---------+---------------+
| time: 24h: 100  | no       | no             | yes     | yes           |
| time: 24h: 200  | no       | no             | yes     | yes           |
| time: 24h: 300  | no       | no             | yes     | yes           |
| time: 24h: 400  | yes      | yes            | no      | no            |
| time: 24h: 500  | yes      | yes            | no      | no            |
| time: 24h: 600  | yes      | yes            | no      | no            |
| time: 24h: 700  | yes      | yes            | no      | no            |
| time: 24h: 800  | no       | no             | no      | no            |
| time: 24h: 900  | no       | no             | no      | no            |
| time: 24h: 1000 | no       | no             | no      | no            |
| time: 24h: 1100 | no       | no             | no      | no            |
| time: 24h: 1200 | no       | no             | no      | no            |
| time: 24h: 1300 | no       | no             | no      | no            |
| time: 24h: 1400 | no       | no             | no      | no            |
| time: 24h: 1500 | no       | no             | no      | no            |
| time: 24h: 1600 | no       | no             | no      | no            |
| time: 24h: 1700 | no       | no             | no      | no            |
| time: 24h: 1800 | no       | no             | no      | no            |
| time: 24h: 1900 | no       | no             | no      | no            |
| time: 24h: 2000 | no       | no             | no      | no            |
| time: 24h: 2100 | no       | no             | no      | no            |
| time: 24h: 2200 | no       | no             | no      | no            |
| time: 24h: 2300 | no       | no             | yes     | yes           |
| time: 24h: 2400 | no       | no             | yes     | yes           |
+-----------------+----------+----------------+---------+---------------+
That's probably it for today. Heaps more to come, as usual. Though maybe I should make the observation if I had a better parser, we could compact the range-is-late operator a little to this:
range-is-late |time: 24h: *> #=> do-you-know drop (sigmoid-in-range[2230,2400] + sigmoid-in-range[0,330]) pop-float |_self>



Home
previous: new function sort by
next: tweaked pretty print table code

updated: 19/12/2016
by Garry Morrison
email: garry -at- semantic-db.org