Last week I was coding up some Genetic Algorithm programs. In the past I’ve used mostly C/C++ but this time I wanted to use C#. The first step when implementing GAs is to get your Gray Code routines ready. GAs typically encode information using Gray Code rather than ordinary binary representations. I figured there’d be several sets of C# implementations of Gray Code routines available on the Internet, but a couple hour search yielded only some very weak (and often completely incorrect) sets of code. So, I wrote my own micro-library. One of the big problems is defining exactly what is meant by a Gray Code library. There are many, many variations. Additionally, there is the annoying but not trivial issue of internal representation (where the low-order / least significant bit is stored, and the readable representation (left to right or right to left). In my case, I needed to work with normal C# int types in the range of 0-255 (such as 15), ordinary binary representations of these ints (such as 1111 — 15 in binary — in standard readable form), and Gray Code representations (such as 1000 — 15 in Gray code). In my case I decided to store binary and Gray codes in memory as arrays of 0 and 1 ints. I came up with six convert routines: int to binary, binary to Gray, int to Gray, binary to int, Gray to binary, and Gray to int. For example,

int n = 15;

int[] binary = IntToBinary(n); // binary holds [1 1 1 1]

int[] gray = IntToGray(n); // gray holds [0 1 1 1]

int[] binary = IntToBinary(n); // binary holds [1 1 1 1]

int[] gray = IntToGray(n); // gray holds [0 1 1 1]

or

int[] gray = new int[] { 0, 1, 0, 1 };

int n = GrayToInt(gray); // n holds 12

int n = GrayToInt(gray); // n holds 12

I’ll post the code in my next blog entry. The moral of the story is that if you are going to work with Gray Code using C#, be prepared to have to spend a couple of hours defining your own custom conversion library.

Advertisements
(function(g){if("undefined"!=typeof g.__ATA){g.__ATA.initAd({sectionId:26942, width:300, height:250});
g.__ATA.initAd({sectionId:114160, width:300, height:250});}})(window);
var o = document.getElementById('crt-1065473472');
if ("undefined"!=typeof Criteo) {
var p = o.parentNode;
p.style.setProperty('display', 'inline-block', 'important');
o.style.setProperty('display', 'block', 'important');
Criteo.DisplayAcceptableAdIfAdblocked({zoneid:388248,containerid:"crt-1065473472",collapseContainerIfNotAdblocked:true,"callifnotadblocked": function () {var o = document.getElementById('crt-1065473472'); o.style.setProperty('display','none','important');o.style.setProperty('visbility','hidden','important'); }
});
} else {
o.style.setProperty('display', 'none', 'important');
o.style.setProperty('visibility', 'hidden', 'important');
}