Daily Archives: 3/25/2010

Moon Bounce Day (Where do I aim the antenna?)

A few years ago when the amateur satellite AO-51 transmitted a beacon message on the 50th anniversary of Sputnik, it was enough to rekindle my interest in amateur radio (which had lain dormant for nearly a decade) and got me working amateur satellites. On April 16, 17 and 18, there is an Echoes of Apollo/Moonbounce day scheduled, which is a celebration of all things radio-lunar. EME or Moonbounce communications has always fascinated me, but has seemed very far out of reach of the small HOA limited antennas that I might be able to deploy. But this year, the radio observatory at Arecibo, Puerto Rico will be active, and its a really, really big antenna. There has been some traffic on the Moon Net mailing list that people have successfully received these signals using smallish yagi antennas, so I think I am going to give it a try.

K1JT posted the predicted hours of operation for Arecibo, so the question became “where will the moon be at that time?” My idea is to tripod mount an 10 or 12 element Yagi and aim it in the rough direction, and try to do some field recording using my FT-817 and a laptop. I was curious as to what elevation I would need, and it would be good to make sure that no buildings obscured my view.

I could have used any of a number of astronomy software programs, or even Google Earth (and Sky) or the Microsoft World Wide Telescope. But I’m a bit of a homebrewer when it comes to calculation, and I like having nice tabular data. So, I rapidly coded up this little python program which uses the PyEphem library:

#!/usr/bin/env python

import sys
import os
import optparse
import ephem
from math import degrees

from datetime import date, datetime

h = ephem.Observer()
m = ephem.Moon()

# K1JT mentioned these as likely times for moonbounce operations
# from the Arecibo Radio Observatory in Puerto Rico...

datetimes = [('2010/4/16 16:45', '2010/4/16 19:30'),
             ('2010/4/17 17:40', '2010/4/17 20:20'),
             ('2010/4/18 18:40', '2010/4/18 21:25')]

# I'm currently in grid CM87ux, which is centered here.

me = ephem.Observer()
me.lat, me.long = ('37.979166666666671', '-122.29166666666666')

moon = ephem.Moon()

print " MOON LOCATION ".center(55, "=")
print ("Observer at %.2f, %.2f" % (degrees(me.lat), degrees(me.long))).center(55, '-')
print

for sd, ed in datetimes:
    sd = ephem.Date(sd)
    ed = ephem.Date(ed)
    me.date = sd
    print "Time (UTC)           Time (Local)            Alt   Az  "
    print "--------------------+---------------------+-----------+"
    while me.date <= ed:
        moon.compute(me)
        print "%02d/%02d/%02d %02d:%02d:%02d |" % me.date.tuple(),
        lt = ephem.localtime(me.date)
        print "%02d/%02d/%02d %02d:%02d:%02d |" % (lt.year, lt.month, lt.day, lt.hour, lt.minute, lt.second),
        print '%4.1f %5.1f|' % (degrees(moon.alt), degrees(moon.az))
        me.date = ephem.Date(me.date + 5 * ephem.minute)
    print "--------------------+---------------------+-----------+"
    print

Running this produced the following table for my home location:

==================== MOON LOCATION ====================
---------------Observer at 37.98, -122.29--------------

Time (UTC)           Time (Local)            Alt   Az
--------------------+---------------------+-----------+
2010/04/16 16:44:59 | 2010/04/16 09:44:59 | 23.8  80.1|
2010/04/16 16:49:59 | 2010/04/16 09:49:59 | 24.7  80.8|
2010/04/16 16:54:59 | 2010/04/16 09:54:59 | 25.7  81.4|
2010/04/16 16:59:59 | 2010/04/16 09:59:59 | 26.6  82.1|
2010/04/16 17:04:59 | 2010/04/16 10:04:59 | 27.6  82.8|
2010/04/16 17:09:59 | 2010/04/16 10:09:59 | 28.5  83.4|
2010/04/16 17:14:59 | 2010/04/16 10:14:59 | 29.5  84.1|
2010/04/16 17:19:59 | 2010/04/16 10:19:59 | 30.4  84.8|
2010/04/16 17:24:59 | 2010/04/16 10:24:59 | 31.4  85.5|
2010/04/16 17:29:59 | 2010/04/16 10:29:59 | 32.4  86.2|
2010/04/16 17:34:59 | 2010/04/16 10:34:59 | 33.3  86.9|
2010/04/16 17:39:59 | 2010/04/16 10:39:59 | 34.3  87.6|
2010/04/16 17:44:59 | 2010/04/16 10:44:59 | 35.3  88.3|
2010/04/16 17:49:59 | 2010/04/16 10:49:59 | 36.2  89.0|
2010/04/16 17:54:59 | 2010/04/16 10:54:59 | 37.2  89.7|
2010/04/16 17:59:59 | 2010/04/16 10:59:59 | 38.1  90.4|
2010/04/16 18:04:59 | 2010/04/16 11:04:59 | 39.1  91.2|
2010/04/16 18:09:59 | 2010/04/16 11:09:59 | 40.1  91.9|
2010/04/16 18:14:59 | 2010/04/16 11:14:59 | 41.0  92.7|
2010/04/16 18:19:59 | 2010/04/16 11:19:59 | 42.0  93.5|
2010/04/16 18:24:59 | 2010/04/16 11:24:59 | 43.0  94.3|
2010/04/16 18:29:59 | 2010/04/16 11:29:59 | 43.9  95.1|
2010/04/16 18:34:59 | 2010/04/16 11:34:59 | 44.9  95.9|
2010/04/16 18:39:59 | 2010/04/16 11:39:59 | 45.8  96.7|
2010/04/16 18:44:59 | 2010/04/16 11:44:59 | 46.8  97.6|
2010/04/16 18:49:59 | 2010/04/16 11:49:59 | 47.8  98.5|
2010/04/16 18:54:59 | 2010/04/16 11:54:59 | 48.7  99.4|
2010/04/16 18:59:59 | 2010/04/16 11:59:59 | 49.7 100.3|
2010/04/16 19:04:59 | 2010/04/16 12:04:59 | 50.6 101.2|
2010/04/16 19:09:59 | 2010/04/16 12:09:59 | 51.6 102.2|
2010/04/16 19:14:59 | 2010/04/16 12:14:59 | 52.5 103.2|
2010/04/16 19:19:59 | 2010/04/16 12:19:59 | 53.4 104.2|
2010/04/16 19:24:59 | 2010/04/16 12:24:59 | 54.4 105.3|
2010/04/16 19:29:59 | 2010/04/16 12:29:59 | 55.3 106.4|
--------------------+---------------------+-----------+

Time (UTC)           Time (Local)            Alt   Az
--------------------+---------------------+-----------+
2010/04/17 17:39:59 | 2010/04/17 10:39:59 | 24.9  78.1|
2010/04/17 17:44:59 | 2010/04/17 10:44:59 | 25.9  78.7|
2010/04/17 17:49:59 | 2010/04/17 10:49:59 | 26.8  79.4|
2010/04/17 17:54:59 | 2010/04/17 10:54:59 | 27.7  80.0|
2010/04/17 17:59:59 | 2010/04/17 10:59:59 | 28.7  80.6|
2010/04/17 18:04:59 | 2010/04/17 11:04:59 | 29.6  81.3|
2010/04/17 18:09:59 | 2010/04/17 11:09:59 | 30.6  81.9|
2010/04/17 18:14:59 | 2010/04/17 11:14:59 | 31.5  82.6|
2010/04/17 18:19:59 | 2010/04/17 11:19:59 | 32.5  83.3|
2010/04/17 18:24:59 | 2010/04/17 11:24:59 | 33.4  83.9|
2010/04/17 18:29:59 | 2010/04/17 11:29:59 | 34.4  84.6|
2010/04/17 18:34:59 | 2010/04/17 11:34:59 | 35.3  85.3|
2010/04/17 18:39:59 | 2010/04/17 11:39:59 | 36.3  86.0|
2010/04/17 18:44:59 | 2010/04/17 11:44:59 | 37.3  86.6|
2010/04/17 18:49:59 | 2010/04/17 11:49:59 | 38.2  87.3|
2010/04/17 18:54:59 | 2010/04/17 11:54:59 | 39.2  88.0|
2010/04/17 18:59:59 | 2010/04/17 11:59:59 | 40.1  88.7|
2010/04/17 19:04:59 | 2010/04/17 12:04:59 | 41.1  89.5|
2010/04/17 19:09:59 | 2010/04/17 12:09:59 | 42.1  90.2|
2010/04/17 19:14:59 | 2010/04/17 12:14:59 | 43.0  90.9|
2010/04/17 19:19:59 | 2010/04/17 12:19:59 | 44.0  91.7|
2010/04/17 19:24:59 | 2010/04/17 12:24:59 | 44.9  92.5|
2010/04/17 19:29:59 | 2010/04/17 12:29:59 | 45.9  93.3|
2010/04/17 19:34:59 | 2010/04/17 12:34:59 | 46.9  94.1|
2010/04/17 19:39:59 | 2010/04/17 12:39:59 | 47.8  94.9|
2010/04/17 19:44:59 | 2010/04/17 12:44:59 | 48.8  95.7|
2010/04/17 19:49:59 | 2010/04/17 12:49:59 | 49.7  96.6|
2010/04/17 19:54:59 | 2010/04/17 12:54:59 | 50.7  97.4|
2010/04/17 19:59:59 | 2010/04/17 12:59:59 | 51.6  98.3|
2010/04/17 20:04:59 | 2010/04/17 13:04:59 | 52.6  99.3|
2010/04/17 20:09:59 | 2010/04/17 13:09:59 | 53.5 100.2|
2010/04/17 20:14:59 | 2010/04/17 13:14:59 | 54.5 101.2|
2010/04/17 20:19:59 | 2010/04/17 13:19:59 | 55.4 102.2|
--------------------+---------------------+-----------+

Time (UTC)           Time (Local)            Alt   Az
--------------------+---------------------+-----------+
2010/04/18 18:40:00 | 2010/04/18 11:40:00 | 25.8  77.7|
2010/04/18 18:45:00 | 2010/04/18 11:45:00 | 26.7  78.3|
2010/04/18 18:49:59 | 2010/04/18 11:49:59 | 27.6  79.0|
2010/04/18 18:54:59 | 2010/04/18 11:54:59 | 28.6  79.6|
2010/04/18 18:59:59 | 2010/04/18 11:59:59 | 29.5  80.3|
2010/04/18 19:04:59 | 2010/04/18 12:04:59 | 30.4  80.9|
2010/04/18 19:09:59 | 2010/04/18 12:09:59 | 31.4  81.6|
2010/04/18 19:14:59 | 2010/04/18 12:14:59 | 32.3  82.2|
2010/04/18 19:19:59 | 2010/04/18 12:19:59 | 33.3  82.9|
2010/04/18 19:24:59 | 2010/04/18 12:24:59 | 34.2  83.6|
2010/04/18 19:29:59 | 2010/04/18 12:29:59 | 35.2  84.2|
2010/04/18 19:34:59 | 2010/04/18 12:34:59 | 36.1  84.9|
2010/04/18 19:39:59 | 2010/04/18 12:39:59 | 37.1  85.6|
2010/04/18 19:44:59 | 2010/04/18 12:44:59 | 38.0  86.3|
2010/04/18 19:49:59 | 2010/04/18 12:49:59 | 39.0  87.0|
2010/04/18 19:54:59 | 2010/04/18 12:54:59 | 39.9  87.7|
2010/04/18 19:59:59 | 2010/04/18 12:59:59 | 40.9  88.4|
2010/04/18 20:04:59 | 2010/04/18 13:04:59 | 41.9  89.1|
2010/04/18 20:09:59 | 2010/04/18 13:09:59 | 42.8  89.8|
2010/04/18 20:14:59 | 2010/04/18 13:14:59 | 43.8  90.6|
2010/04/18 20:19:59 | 2010/04/18 13:19:59 | 44.7  91.3|
2010/04/18 20:24:59 | 2010/04/18 13:24:59 | 45.7  92.1|
2010/04/18 20:29:59 | 2010/04/18 13:29:59 | 46.6  92.9|
2010/04/18 20:34:59 | 2010/04/18 13:34:59 | 47.6  93.7|
2010/04/18 20:39:59 | 2010/04/18 13:39:59 | 48.6  94.5|
2010/04/18 20:44:59 | 2010/04/18 13:44:59 | 49.5  95.3|
2010/04/18 20:49:59 | 2010/04/18 13:49:59 | 50.5  96.2|
2010/04/18 20:54:59 | 2010/04/18 13:54:59 | 51.4  97.1|
2010/04/18 20:59:59 | 2010/04/18 13:59:59 | 52.4  98.0|
2010/04/18 21:04:59 | 2010/04/18 14:04:59 | 53.3  98.9|
2010/04/18 21:09:59 | 2010/04/18 14:09:59 | 54.3  99.8|
2010/04/18 21:14:59 | 2010/04/18 14:14:59 | 55.2 100.8|
2010/04/18 21:19:59 | 2010/04/18 14:19:59 | 56.1 101.8|
2010/04/18 21:24:59 | 2010/04/18 14:24:59 | 57.1 102.9|
--------------------+---------------------+-----------+

From this, I determined that I could probably mount the antenna at a fixed 30 degree elevation, aimed mostly east, and I’d likely (given the width of the main lobe of my proposed antenna) be good to go, without any additional guiding.

Now, I just need to get the antenna constructed.

Classic Board Games for Computer Implementation?

So, my experiments with my checkers program Milhouse have been fun and interesting. There is still work to be done: I don’t think a machine that can’t properly play first position can be reasonably said to be a good checkers player (even though I still make errors while practicing it myself against Cake), but I’ve learned a lot. I’ve been toying with the possibility of doing a rewrite of Milhouse, but maybe that isn’t the best use of my precious after-hours time. For the last couple of days, I’ve been musing about the possibility of finding other strategic board games that might be fun to try. Here is a rough list of my internal criteria:

  1. It should be a game that people play. It would be great if there was some existing scholarship on human play, including test positions.
  2. It should be a game which is uncopyrighted and free from legal restrictions for use. Hence my use of the term “classic”.
  3. It should be reasonably hard. Trivial games like Tic Tac Toe need not apply.

There are some additional possibilities..

  1. I’m willing to consider games with a chance component (such as dice in backgammon) or a gambling component (such as the doubling cube in the same).
  2. I prefer games which are more abstract, whose difficulties arise from position and interaction more than complicated rules.

So, what games are out there?

Well, obviously there is chess and its variants, including Shoji, Xiangqi and a slew of modern variants. Originally I had a goal of implementing chess, but I must admit that it doesn’t appeal to me quite as much now largely because I view it as less abstract than games like checkers. The difficulty of First Position arises not because of complex interactions between different piece types, but because of the interplay of very simple elements. Still, I have considered the possibility of taking one of the variants of chess that are played on small boards perhaps a 5×6 board and developing opening and endgame databases for these. I haven’t done the math on what it would take to resolve the game theoretic value of one of these small games, but it might be tractable with the computing power that I have at my disposal.

There are obviously variants to checkers, including international draughts and the misere variants, also known as suicide checkers. The idea is that the person who loses all their pieces first wins. Martin Fierz has a version of Cake called Suicidal Cake which can play suicide checkers, which is an interesting variant with many of its own subtle problems. International draughts is a much more complicated game, with a larger board and some really interesting rules for jumping. There are other variants as well (Polish, Turkish, Italian) which could be considered as strong candidates.

Othello or Reversi are interesting games of position, and which can use many of the techniques we see in checkers and chess (namely opening books and endgame databases). There is also a fair amount of human knowledge about the game, which is good.

Backgammon introduces chance into the mix, which generally means that you need to use a different set of techniques than we’ve seen so far. I also like to play backgammon (although am only a middling level player). Backgammon has been the subject of quite a bit of machine learning research, and there exists many implementations to spar against.

Hex is a very nearly perfect abstract game: players alternate turns to connect their side of the board to the opposite side. There are no draws possible. The entire games can be displayed as a single graphic, which shows the order in which stones were placed on the board. The high branching factor makes traditional alpha-beta search less attractive.

Go has many of the same characteristics, with the added bonus of having lots of good human players. There has been a lot of interesting research recently about playing Go.

Arimaa was designed to be hard for computers to play, but frankly, I think that it does so only by making a rule system which is complicated. It seems between the push, pull, freeze and trap rules, there are at least two and maybe three that could have been eliminated. I also suspect that while it is (according to the authors) “easy to learn”, I suspect that really only means “easy to learn the rules”. I would make the (unsupported) claim that most human play is quite weak as well.

Games like Awari or other games of the mancala family have been studied quite extensively. Connect 4 has been solved, but is still middling interesting.

Any other board games I’m missing? I await your suggestions and/or advocacy.