Its been a while!

Almost a year to the day since my last post… I’m still making my way through the GaTech OMSCS program. I am nearing the halfway point. This semester I am taking something pretty different. Modeling, Simulation & Military Gaming.

Thus far its pretty interesting. For not having worked with modelling or simulation in the past, this is a pretty nice toe-dip. I am particularly enjoying the context. Military history with a focus on battle outcomes. Look at me, getting a little International Affairs with my Computer Science. Ha!

Writing an AI Agent

I’ve just completed my first coding project in my Master’s pursuit. It was to write an artificial intelligence agent that could solve the ‘Sheep and Wolves’ problem. For those unfamiliar, this problem goes like this:

A farmer has some number of sheep and wolves. He also has a boat. He needs to get these animals across a river, but can only take 2 at a time. Now, he can never leave more wolves than sheep on either side of the river, or the wolves will eat the sheep. He also cannot cross with less than 1 animal either direction (he gets lonely).

So, we had discussed several problem solving methodologies in class. The goal of this course in particular is to solve these AI problems taking a more human/cognitive approach (as opposed to purely optimal solutions as seen in Machine Learning). I ended up using a model called “Generate and Test” which is a fancy way to say, take an informed guess, and see if it is correct.

I accomplished this through building a state tree of the problem and all its possible “move”. For example, the farmer can only take:

  • 1 sheep
  • 1 wolf
  • 1 sheep and 1 wolf
  • 2 sheep
  • 2 wolves

So, we build a state to represent the starting condition, then update it based on these 5 possible outcomes. Then these 5 possibilities again branch out into 5 more possible outcomes each, and so on until a tree of every conceivable (and valid) possibility is complete. This is a lot of compute! So, I came up with a couple of heuristics to limit the state space a bit.

First, there are tight limitations on which states can be created and added to the tree. No illegal moves based on the problem rules, no bringing 2 animals back from the starting side of the river, this sort of thing.

Secondly, a simple boolean to check and see if the “success” state was ever achieved. This check was performed against a Set structure with constant time lookups (very efficient) in which I placed every state as it was generated. If we ever see the success state, we stop generating immediately.

Finally, a BFS through the tree looking for this success state completes the solution, and a tree walk back to the root node of the state tree delivers the list of moves needed to arrive at the solution. Very cool stuff.

(= Understanding (AND (LISPS) (RECURSION)))

I wanted to take a moment to mention recursion. I’ve talked about it before, and I’ve had a few classes that covered it. But, it took really getting into Clojure and its LISPs for me to have that ‘Aha!’ moment where my brain can more easily understand them and create the cases necessary to design one. I think the reason it sook so long was, during my other coursework, I was too concerned with other aspects (for example, in algorithms, we were graded on our ability to calculate the time complexity, rather than our understanding of recursion. Or, in discrete, the proof was the important part).

It’s been frustrating at times, and I can’t say that I still don’t loathe the prefix and parentheses notation of LISPs in general, but I can say that exposure to them has made recursion a tool in my developer toolbox that I’ll reach for more often now that it doesn’t present such a challenge for me.

Admissions Decision incoming

So I don’t think I’ve mentioned it here before, but I applied for Georgia Tech’s MS in CS program last year. It looks as though admission decisions are starting to trickle in… I’m not 100% I’m going to commit if accepted, the past 2 years have been quite hectic, juggling work and school. I think I’ll take the summer to contemplate my navel a bit. Then again, if the admission decision doesn’t go my way, that will make the decision much easier! In either case, the ‘not knowing’ is the worst part right now.

New rig

I finally managed to get ahold of a video card to complete my new PC build! Here are the specs:

AMD Ryzen 9 5900X (12 cores, 4.4Ghz)

Nvidia GeForce RTX 3060 (literally the only card I could find at MSRP)

32Gb DDR4 3600Mhz RAM

2TB Corsair MP600 Pcie4 NVME SSD

I’m also using Corsair for about everything else (Case, CPU AIO Cooler, Fans, PSU, etc)

Here’s a pic!

And now for something completely different…

I was thinking about the end of my time at Auburn (*attempts Yoda voice* Fast approaching, the end of April is.) and looking at this site, its really just been a place for me to vent and use as a soundboard for school (I don’t think anyone other than the bots commenting on my posts have actually visited.)

Anyway, this got me thinking that I should expand its usage a bit more. I have enjoyed typing out my thoughts here on occasion, why not expand that to other facets of my life? So I’m doing just that. Introducing my first life blog post! (…And SCENE!)

Weightlifting!

I started a new ‘hobby’ about 6 months ago when I realized how overweight I was getting (its hard to stay slim when you sit in front of a computer all day and most of the night). I’ve been lifting weights to help combat that, and it has worked wonders. Ever since I left the Army I have had kind of the wrong attitude toward exercise (mostly because they MADE us do it; and at the most inopportune times no less … I’m looking at you 0-dark:30). I am trying to change that mind set.

Here is my 6 month progress report:

Total weight lost: 30lbs

Fat lost: 50lbs

Muscle mass gained: 20lbs

Current routine: PPL (Push, Pull, Legs)

I also just bought a Rogue fitness squat rack and olympic barbell/plates. I’m really getting into this!

Networks!

This semester has a lot to offer. I am through with theory, and its time to IMPLEMENT! Web Dev II is primarily Javascript. Networks is a bit of theory, but mostly implementation of TCP and UDP protocols. After these, I will be in Mobile Dev II featuring Swift yet again as well as Programming Language and Translation which will be putting a lot of what I have learned together into compilers and lexers. (From what I have heard we transform SmallTalk into another language) Should be interesting!

Oh, and no big deal but, I graduate soon! Woo!!

Autumn air!

Its getting cooler out, this has to be one of my favorite seasons.

This semester I have a pretty wide array of course work. To begin with, Software Engineering is covering the software development lifecycle. I am learning UML and all of the ways that systems are modelled; from requirements analysis to production. In addition I’m finishing up my 2nd database course, focused primarily on query writing.

After those, I am on to Web Development with XML/JSP and Mobile development with Swift. It’s been a great semester so far, and I can’t wait for spring (my FINAL term!) With graduation so close, I’ve began working on updating my resume and researching positions and companies. Having said that, I may stay where I am, as I plan on transferring to Georgia Tech for my Master’s NEXT fall!

Last item: I just got selected for a work project with Python for a graphics application. The goal is taking scientific data sets and plot them to charts and maps. Should be a great learning experience!

Short break then on to Summer term!

Hi! I hope this crazy post pandemic world finds you all well. I have finished up my Algorithms II course (managed to keep my 3.9 gpa too!) and am enjoying a much needed break before summer term starts. Since I’m stuck inside and working from home, I thought I’d use the opportunity to learn some new tooling and platforms, thus I am learning Oracle WebLogic (previously I’d only ever been exposed to Glassfish for EE apps).

So whats up for summer term? Cloud! Specifically, AWS application development. I am pretty excited about that class. I’m also toying with some personal projects. If I get anything interesting, I’ll post it to the portfolio site. See ya!