Boolean satisfiability is a classic problem in computer science. Given a series of n boolean variables, A B C ... and a formula in 3-conjunctive normal form

Through focused diligent research, CDCL (clause driven conflict learning) methods are the state of the art methods for solving 3Sat, and it's truly marvelous, that humans even have a shot at understanding this problem. However, every once in a while there are armchair mathematicians that seem to believe, that they can do better. P = NP, and their 20 line algorithm proves it.

600 On the 3Sat is a facetious exploration of these less than theoretically motivated approaches, and an analysis of how wrong these approaches are compared to the state of the art clause driven conflict learning solver. (repo)

The code used to display the table is adapted and reproduced with an MIT License from this codepen

We tried a number of optimization strategies: For each value of n we ran a few repeats of each algorithm on a few different random instances of 3sat with n variables and 4.5 * n (chosen within the "critical region" for random 3Sat") clauses. Each clause consisted of 3 random variables with a .5 chance of negating any variable. The column marked with the strategies name was the average response of the strategy, 1 = Satisfiable, 0 = unsatisfiable, strategy_correct is the fraction of said responses that are correct, and strategy_time was the time it took to receive the answer. Strategies that operated too slowly, were cut off from future trials, so most of this chart has no data on it.

- canonical: Standard CDCL type solver from Mathsat
- ilp: Alternate standard way to solve 3Sat via reduction to integer linear programming.
- crank_algorithm: Alleged bounded error polynomial time algorithm for 3sat, found from this paper.
- schonig: The gold standard for heuristic local 3Sat algorithms: Schonig's algorithm
- local_sat: Greedy gradient descent type approach to 3sat.
- nonconvex_local: Assume that the minimization solver from scipy can solve arbitrary nonconvex problems, then reduce 3sat to a nonconvex problem.
- hyperopt: Use black box optimization techniques.
- brute_force: Try every assignment of variables.

CDCL is a complete and sound method, so the canonical solver line is also the number of solvable instances.

"Abstract Nonsense" is a somewhat loving, but somewhat derisive term for methods (typically
Category Theoretic methods) in pure mathematics that are unreasonably convoluted and involve a lot of theoretical machinery.
I myself am awful at Category theory but excellent at abstract nonsense, and I wanted a space to share my thoughts
and projects. I'm well aware that very few people will read this blog, but to me this space is a journal. A respite
from the giants that control the web, and a space to share my thoughts into the void, in a way I can control and moderate.

More concretely, I hope to maintain "Abstract Nonsense" as a dev log as sorts. Not because I think it showcases phenomenal
technical talent, but because it showcases some of the cool things I've been learning on the side.

I'll keep my first entry on this journal quite short. This entry stands well on its own.
Because it does something the category theorist in all of our hearts would love.

It's self referential.

The content engine that runs Abstract nonsense is quite brilliant if I do say so myself.
It is a python script tha takes in a series of html files, and agglomerates them into a single file.

In addition to the abstract nonsense engine I have two other python scripts that form the backbone of this (static)
website. I have a script that takes in plaintext of a quote document I have been personally maintaining for the
past 3 years. It uses regular expressions to parse out the quotes and build an html file that contains java-script
that builds a dynamic webpage this java script program alters the html on the page to create a typing effect.
Check it out
here! The final piece of this beautiful infrastructure is a third script that runs both scripts than commits the whole branch to master.

As I learned on Twitter/Reddit/The Quote Document:
"Everybody has a testing environment. Some people are lucky enough enough to have a totally separate environment to run production in." - @stahnma
Abstract nonsense and this website as a whole is both test and prod. Maybe one day, I'll be a good enough engineer
to be able to invest in a test and prod for my website.

- Address - The address of the proposed purchase
- Price - The proposed purchase price of the home
- Term years - The number of years in the fixed rate mortgage
- Interest Rate - The interest rate in percent
- Property Taxes - Annual Property taxes
- HOA Fees - Monthly HOA fees
- Insurance - Yearly homeowners insurance policy
- Fair Market Rent Estimate - An estimate of a fair rent on the open market for the apartment.
- Expected appreciation Percent - The percent of annual appreciation you would like to model for for the apartment. The trailing 25 year average appreciation is 3.8%
- Cash needed to close - The down payment and closing costs (2%) on the house
- Loan principal - The initial loan principal
- Principal and interest - The monthly expenses on the mortgage from principal and interest
- Total Monthly Payment - Full monthly payment including principal, interest, hoa, taxes, and insurance
- Initial interest - Initial interest payment first month.
- Rent Equivalent Mortgage - The portion of the initial monthly mortgage payment which does not build equity.
- Expected Sales Price - The sales price factoring appreciation at the end of the mortgage period
- Expected Sales proceed - The cash pulled out of the house from the sale after realtor fees (2.75% * 2)
- Equivalent return rate - The break-even rate of fixed return. If you can deposit money at a better risk adjusted long-term rate then this, you should consider alternate investments.

If you have a fixed budget or you want to tweak the numbers to see what would need to change to meet certain financial goals try out the optimizer. The optimizer uses the bisect method to find some input which meets a certain goal. For example, say you have 100,000$ and you want to figure out how much you can spend on a house, the optimizer will help you budget.

Right now this product is in a tech-demo stage. Short-term, there are two features that we plan to build out relatively shortly.

- Storing previous analysis offline and being able to return to it.
- Being able to automatically import listings from an MLS filtered by certain constraints.

- Suggest financial literacy resources / appropriate debt to income optimization
- Import sensible defaults for market-sensitive and location-aware things like rate of appreciation/ interest rate
- Model risks associated with more complicated loan products like ARM
- Consider an analysis where the user decides not to sell at the end of the term, and instead, refinances the mortgage or simply pays down the house and holds it

This is a weird blog entry. The end goal of this project is to eventually run a 100 mile Backyard Ultramarathon using only free software This rule is to be interpreted as reasonably as possible and should only apply to tech worn or carried through the race. This rule also does not apply to any crew. This rule is to be followed in spirit. For example if unavoidable small bits of nonfree cpu microcode are acceptable or in modem firmware, care will be taken to isolate such components. An artifact of this is any music listened to during the race will be DRM-Free. The patent on mp3s has recently expired so it is free. I've been a pretty rubbish runner for most of my childhood so this project is technically and physically grueling.

- This domain was ransomed while attempting to write this dev log.

Distance | P95 | P99 | PR |
---|---|---|---|

Mile | 6:00 | 5:20 | 5:47* |

1.5 mi | 9:10 | 8:22 | 8:58* |

5k | 21:12 | 17:38 | 19:47* |

10k | 41:17 | 34:24 | 44:42 |

Half Marathon | 1:33:04 | 1:18:07 | 1:38:13 |

Marathon | 3:08:42 | 2:44:18 | 3:58:05 |

50k | ??? | ??? | 4:56:35 |

24 hr Backyard ultra ruleset run distance | 50 mi | 100 mi | 34.4 mi |

This "blog" is called "Abstract Nonsense" because of this project. Most language models try to build interesting
output, but end up spouting abstract nonsense (with or without some semantic correctness). Well,
I thought to myself, I have a corpus that itself is really just abstract nonsense, maybe I could train an NLP
transformer model on this corpus, and oddities of syntax, would actually be a feature!

Because the robot is confused, it will also be named Abstract Nonsense, to maximize perplexity with respect to the
identically named blog hosted on this site

I present to you GPT 9001! Which is really just a fine tuned version of GPT 2 tuned for text generation on
the Quote Doc In this project I learned that
hand-rolled models that I can quickly train are trash. For example, the first implementation of GPT 9001, was called GPT0,
and was just some LSTM model I spun up and trained on the quote doc, the LSTM model could either predict random
words or overfit the training set. It couldn't do anything of interest :(.

Anyway, without further ado here s/he is:

Here GPT 9001 is reflecting on the repetitive nature of training deep neural networks. Quite introspective, and certainly not just a chance occurrence! Click the image or this sentence to see more brilliancies from GPT 9001 Please understand that the writings on this page are that of an AI and despite a good faith set of filters might be unsettling, mildly profane, or nonsense. GPT was pre-trained on a corpus of data, so a name appearing in its output does not necessarily mean I know this person. The model also predicted authors. These predictions are quite funny especially if you know the people, but to avoid people mistaking satire for reality, I will not show the names. Update: new and improved model (GPT 3 based)

This is the official page for tracking my (Rohan Jhunjhunwala's) progress and funds raised during his Backyard Ultramarathon for Bidya.

Bidya is an organization which raises money to create scholarships for underprivileged females in Nepal.
With as little as 1500-2500$ in capital we can create a scholarship fund which can fund all annual K-12 educational
expenses for one Female student in need using the interest returns alone.

Because of the comparatively low costs in Nepal, and our relationships with certain high-schools,
we can ensure that every dollar Bidya fundraises will efficiently go to a child in need.

Donations to Bidya are 100% 501c(3) tax deductible. Rohan and Rakchhya are matching all
donations made to this Ultramarathon fundraiser. For every dollar donated, 3$ will go to funding
critical scholarships for underprivileged female Nepali students. To make a per-mile pledge reach out to
rjhunjhunwala80@berkeley.edu or feel free to donate directly.

This is a race without a finish line. Competitors run 4.17 miles every hour on the hour until there is just one athlete left standing able to complete the loop.
Any pledge, big or small, makes a big difference both to our scholars and to me when I'm exhausted out
on the course hoping to be the last man standing. As a thank you to our patrons. I will update this page live *during* the race, Saturday, June 1.
The javascript graph below will track the total funds raised so far.
The race also has an official Facebook Leaderboard.
If you'd like to drop some cheers in the comments there, we'd be really appreciative. Special thanks to all supporters and my team
that is coming out to this event.

- 500$ + Matching all remaining donations 1:1
- A second match of all remaining donations 1:1
- 500$ flat contribution
- (2 pledges) 1$ per mile for the first 25, 2$ for the next 25, 3$ each for the next 25 and so on.
- 1$ per mile for the first 50, 2$ per mile for the next 50, 3$ per mile for the 3rd 50 miles. Losing it all if I go over.
- (2 pledges) 1$ per mile for the first 50, 2$ for any remaining miles
- 2.5$ per mile
- 100$ flat contribution

This update is a quick one.

I learned that this floofer needed some head pats, and I had to help!

This is an important cause, so feel free to compile and run the following java script (not javascript fortunately) to help out the floofer.

You even get chills as you type the commands into your terminal:

Your app runs, it does the big data, but still... somethings missing... you can't put your finger on it....

You are missing ACTUAL pandas!! Wouldn't it be great if these magic spells also summon the animals whose name you invoke? Introducing: pipinstallpandas.py! Whenever you invoke the name (or even mention it in any context of an animal to do your magical programming work, this script will also show you some pictures of the cuties to help you properly express your gratitude some example commands to try in your terminal. Typing other words will show you a surprise. Without further ado: here is the script: Download the script here. Formatting for code borrowed from this Code Pen See on Github

I came across an exciting problem in a stand up maths video.

Using a simple brute force graph-theory argument, a viewer had gotten the runtime of Matt's solution down from 32 days to 15 minutes. By throwing the book at the problem I thought we could do better.
With good fundamental knowledge of the english language and machine structures other authors
have implemented some variant of exhaustive search with substantially better runtime of 100 milliseconds. With fundamentally simple code.
However, using Mixed integer programming, ( a simple formulation around set covering) we can optimize this to 10 seconds (360 * 24 * 32) times faster than Matt's code.
An alternate approach using pySMT (satisfiability modulo theories) has an estimated runtime of around 11 hours. My formulation of this as a SMT problem finds one of the 11 assignments of words for this problem
1 hour.
These are overkill solutions but have a certain mathematical elegance to them, that makes me really happy.