Logan Bradley

Second-year computer science student at the University of Virginia, class of 2029. Software engineer at N2O.com. Officer at ML@UVA.

Logan Bradley

Personal projects

Things I have built on my own time.

2048 reinforcement learning

One of the best 2048 players the world has ever known.

  • 2026
  • C, Python, PyTorch
Score 0Largest tile 2
Move 0 of 0
My highest-scoring game, the best of 2,200,000, replayed move for move. It ends at 1,762,868 points with the 65536 tile.

65536 tiles made per hour

Measured on a Google Colab machine (AMD EPYC, 8 cores). 2048EndgameTablebase was run without its large endgame tables (terabytes); with them it reaches 65536 in about 9% of games, at a speed I could not measure.

I have always been terrible at the game 2048, so I decided to train a model to beat the highest score I could find from anyone, human or AI. After researching a few competitors, namely macroxue/2048‑ai, a deep search program, Guei, Chen and Wu's n-tuple network, and game‑difficulty/2048EndgameTablebase, a deeper search backed by terabytes of endgame tables, I found the score to beat: 1,712,092, set by 2048EndgameTablebase.

I tried a few methods and settled on a two-stage n-tuple network for most of the game, since it is much faster than a deep search, then exact endgame tables for the late game, when many of the high-value tiles are locked in place. With my best player, my chances of breaking the record were about 1 in 100,000 per game. You can find much more detail on how my model works in the “Technical details” section below.

Technical details

My player consists of two different n-tuple networks, each made of 8 lookup tables over 6 cells of the board, 272 million weights each. They learned entirely from their own games through temporal-difference (TD) learning. After every move, the network's estimate for the previous board is shifted towards the points it just earned plus its estimate for the new board, meaning the value of good positions slowly trickles back through the game as it plays. Following Guei, Chen, and Wu, I started every board's evaluation at an optimistic 320,000 points to encourage exploration, and used a fixed learning rate of 0.1 across the first 90% of training, switching to temporal coherence for the last 10% to reduce noise and allow the weights to settle. It took a total of 191 million games, over 107 hours of training across both my laptop and Google Colab, for the models to finish learning the game. When playing, the first model plays up until it makes a 16384 tile, then the second one takes over. Played games use an expectimax depth-2 search to evaluate moves.

The networks were not very good at late-game play, so once the board held both a 32768 tile and a 16384 tile, the player switches to 42 GB of exact endgame tables that I built (following macroxue's approach) which assume the largest tiles form a block in the corner. If there is no match to a table, it instead uses a depth-4 expectimax search, which scores boards by how neatly the tiles descend from a corner.

After that, I focused on speed. The odds of a record come down to how many 65536 tiles the player can make per hour, and it turned out the search before the hand-over was mostly wasted: the late game finishes a board just as well no matter how it got there. Dropping that search entirely (depth 0, late 4) makes each game weaker, with 0.5% reaching 65536 instead of 1.5%, but it plays about 20 times faster, so it makes about six times as many 65536 tiles per hour. On the same machines, that's nearly four times as many as macroxue's program at its best setting. In a run of 2,200,000 games at this setting, it averaged 422,630 points, and its best game scored 1,762,868, my current record.

My fully completed player averaged 574,188 points per game and reached the 65536 tile in 1.5% of them.

And I successfully beat the record, with my best game scoring 1,762,868 points!

Then, to find more record games, I focused on speed. Dropping the search before the endgame lowers the 65536 rate from 1.5% to 0.5%, but plays nearly 20 times faster, so it makes nearly four times as many 65536 tiles per hour as macroxue's program at its best setting. 2048EndgameTablebase searches deeper than my player and will probably beat it eventually, but its games take so long that, for now, I am ahead on the number of games played.

For fun, I also added a few modes of my own.

In cool mode, the player chooses the tile that shows up, removing randomness from the game. Because of this, a fairly simple heuristic player can score 3,932,100, the highest score any game of 2048 can reach. I was inspired by the math proofs that were released by OpenAI (openai/math), and I wanted to replicate that by having Claude write a proof in Lean that this was the maximum score, which it was able to do very easily.

In evil mode, the game places each new tile wherever it hurts most. My normal player, which expects random tiles, falls apart: its median over 100 games is 2,620 points, and its largest tile never passes 512. However, if it knows to only look at worst placements and looks six moves ahead, it reaches a median of 11,412. Increasing that to 10 moves ahead, and teaching it the fixed rule the evil placer follows, it reaches a median of 145,956.

In good mode, the best possible tile for you is placed each time. My record player averages about 1.1 to 1.2 million points there and reaches 65536 in over half its games, compared with 1.5% in the normal game.

Cool mode

Score 0Largest tile 2
Move 0 of 0
A full game from my heuristic player that attempts to always make a snake pattern with descending-value tiles. It scores the proven maximum of 3,932,100 points.

Evil mode

Score 0Largest tile 2
Move 0 of 0
My trained n-tuple player in evil mode, using its normal search, which expects random tiles.

Robots

A game where you build robots from parts, program them, and send them to fight each other.

A wide dark scene over flat ground: a missile drone at the left, its missile in flight, a line of gun tracers running from a larger gun drone at the upper right down to the missile, and a laser tower on the ground firing a beam at the gun drone.
The robot builder: a grid holding a walker with four piston legs and four gun turrets, with a parts list on the left and controls and scripts on the right.

You snap parts onto a grid, write a script that controls the robot, and drop it into a world with physics. Robots can carry many kinds of parts, including bays that build other robots, weapons, and sensing and communication systems.

For replayability, the simulation is fully deterministic. It runs in fixed steps, so no matter how fast it runs or how much it lags, the same inputs always lead to the same result.

  • 2026
  • TypeScript

A fight in the game: a drone that builds its own homing missiles, with a laser tower on the ground, against a gun drone and then a cannon drone.

Inkwell

A minimalist, distraction-free note-taking app.

The Inkwell window: folders and notes on the left, a note about hash tables open in the middle, and formatting buttons for bold, italic, underline, headings, lists, checklists and links on the right.

My friend Michael and I felt like every note-taking app had way too many features shoved in that were overkill for 99.9% of tasks and were very distracting, so we chose to build our own. We built Inkwell to be minimalist and uncluttered, with very few features by choice.

We created the app in Tauri, which we'd never used before, and eventually got stuck on a few bugs we couldn't solve. So, in 2026, I came back in and fixed them with the power of Claude, and now the app is a joy to use!

GeneSIS

The gradebook of the future.

GeneSIS home screen: a GPA card, class rank, attendance, and a chart of one class's grade over time. The app's bottom bar has Home, Grades, Feed and Settings. GeneSIS gradebook: one card per class with a letter grade, a percentage, and the change this month. The app's bottom bar has Home, Grades, Feed and Settings. GeneSIS updates feed: recently graded assignments, each with its score and its impact on the grade. The app's bottom bar has Home, Grades, Feed and Settings.

These screenshots contain demo data.

I built GeneSIS as my high school senior research project along with Ishan Ajwani. Over the course of the entire year, we built an app that uses the StudentVUE SIS API to get your grade information and display your cumulative GPA, class grades, trends, and how every assignment impacts your overall grade.

Experience

Work I have done for a company, a client or a club.

N2O.com

Software Engineer, May 2026 to present.

DoD compliance platform

I was selected to a 20-person team supporting the DoD Chief Digital and AI Office's (CDAO) Enterprise Agents program (PSP-7), building a compliance platform that speeds up security certifications (ATOs).

I redesigned that platform on FastAPI and PostgreSQL. Instead of a single pass or fail ruling for each security control, a control's status now rolls up from the answers to each of its requirements, which is how a security assessor actually evaluates it.

I built a TurboTax-style questionnaire in React that asks every role on a system objective yes or no questions and files each answer under a specific requirement, so an assessor spends less time interviewing people and writing up results by hand.

I also designed an LLM-based assessor that drafts an answer for every requirement the evidence supports. It cites evidence for each claim, the server verifies every citation, and a human reviewer approves every draft.

Knowledge platform

On N2O's internal knowledge platform, I put 85 production tables behind one definition and gave the core reference tables a full version history, so any claim in an AI-written summary traces back to the event behind it.

Client revenue platform

For a medical-supply client, I built a scheduled job that brings their sales deals and stage history into their revenue platform, surfacing 78 open deals worth $3.2M.

ML@UVA

Officer for projects and partnerships at the University of Virginia's machine learning club, since March 2026.

EY Federal Contract Matching

Project lead, April to August 2026

I turned a cold lead into the club's first summer client project, then led a team of five to build it: a system that reduces about 80,000 federal solicitations to a ranked shortlist for EY Technology Consulting.

EY estimated the manual sweep it automates at about 150 hours a year. Each weekly refresh costs under $2 to run.

We compared keyword search, semantic search, structured filters and an AI judge. The first two mostly fail here, because marketing copy and federal contract language share almost no vocabulary.

We presented the system to senior leadership in EY's Americas Government and Public Sector practice.

Candlefish.ai Concrete Estimates

Team member, November 2025 to May 2026

I worked on a club project for Candlefish.ai that estimates concrete pours from architectural plans. I built a segmentation model that picks out each type of line in a raw blueprint image, using an FPN decoder on a SAM 2 encoder.

I also prototyped the next step: turning those lines into building footprints, scaled areas and 3D models of the structure.

Patents

Sole inventor on two issued U.S. patents and one pending application.

FIG. 9 of the patent, a line drawing: a small drone flies near a utility pole, and a tree branch hangs over the power line.

US 12,670,711

Issued June 30, 2026

Artificial Intelligence System and Machine Learning Method for Electrical Grid Management Using Unmanned Aerial Vehicle Traffic Data Collection

FIG. 1 of the patent, a line drawing: drones, two of them carrying packages, fly along a row of transmission towers, and some are parked on platforms at the tops of the towers.

US 12,079,015

Issued September 3, 2024

Systems and Methods for Recharging and Navigating Unmanned Aerial Vehicles Using the Electrical Grid

Application 18/661,542

System, Method, and Machine Learning Model for Autonomous Vehicle Battery Recharging Using the Electrical Grid and Public Roadways

Filed May 10, 2024. Pending.

AI Safety Investigation Act

A policy brief proposing a federal body that investigates AI incidents, modeled on the NTSB.

  • First place, VAISI AI Policy Competition, April 2026
  • With Ishan Ajwani

Ishan and I wrote it over seven days for VAISI's AI Policy Competition. The proposed body, AISIA, would investigate major AI incidents, determine what contributed to them, and publish its findings. VAISI published the brief.

The first page of the brief: the title, The AI Safety Investigation Act: A Federal AI Incident Investigation and Reporting Authority, the authors Logan Bradley and Ishan Ajwani, and the Executive Summary.

Other projects

DineMaster's start screen: the section names across the top, then colored square tiles showing meal exchanges left, dining dollars left, tomorrow's plan, and the chance that dining dollars will last the semester.

DineMaster

If I use too many meal swipes, I'll run out, but if I use too few, then they vanish into thin air at the end of the semester. This tool automatically downloads my transactions and runs a bunch of analysis to calculate my optimal consumption rate. It's fantastic.

Billion: a crowded game screen twelve minutes in, with the final boss, The Bill, beside the player and enemies on every side.

Billion

I'm not even sure what this genre is called, but this (mostly AI slop) game is actually very fun. Give it a try!

Portfolio tracker, the overview screen: market value, cost basis, gains, dividends and total return across the top, a chart of the portfolio's value over one year with each purchase marked, and a list of the holdings that moved most that day. Sample data.

Portfolio tracker

My spreadsheet I was using to track my investments wasn't flashy enough for my liking, so I created this portfolio website. I do not intend to ever make this scalable, but it's great for me! (The image contains demo data btw)

Education

University of Virginia School of Engineering and Applied Science

Class of 2029

B.S. Computer Science. GPA 4.00.

Thomas Jefferson High School for Science and Technology

Class of 2025

GPA 4.48. SAT 1550. National Merit Scholar.