Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Girlsim
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Girlsim\n",
"Given a certain attractiveness level, how choosy should you be?\n",
"\n",
"## Critical Assumptions and Explanations\n",
"Most girls are 5 in hotness (cue screaming by women and feminists and SJWs) This is simply by definition, sorry to burst your princess bubbles.\n",
"\n",
"Women of hotness x prefer hotness x+1 (only some prefer less, because they don't want to feel jealousy, or have had bad experiences with men and want someone they can more easily keep in a relationship. Those are excluded, but if you want to code it up, I think it's 20% of the population).\n",
"\n",
"Even if you move to a city where you find most girls hot, after a few months you will be accustomed and 5s will be the most common again.\n",
"\n",
"You meet an 8 just about as frequently as other people meet their 8s. That is, it doesn't matter what an 8 actually looks like.\n",
"\n",
"Chemistry is important too, modeled by your secret Chemistry numbers. If they match up, you have chemistry. If you think 1-2/20 is too high odds of having chemistry with someone, feel free to increase the range of numbers or work on your social skills.\n",
"\n",
"Success is defined as \"the feeling of sexual abundance\", i.e. you're not desperate to cling on to her because she's the only girl who'll like you back in a long long time. The actual numbers may vary, but let's say that if the distribution of hotness of girls who accepted you looks more discrete than distributed, then you're pushing your luck too far.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 233,
"metadata": {},
"outputs": [],
"source": [
"import random\n",
"import pandas\n",
"import matplotlib.pyplot as plt\n",
"plt.style.use('dark_background')\n",
"\n",
"from scipy.stats import truncnorm\n",
"def get_truncated_normal(mean=0, sd=1, low=0, upp=10):\n",
" return truncnorm(\n",
" (low - mean) / sd, (upp - mean) / sd, loc=mean, scale=sd)\n",
"X = get_truncated_normal(mean=5, sd=2, low=0, upp=10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First let's make sure that we can accurately simulate the preferences of a girl with only 100 samples from a gaussian distribution."
]
},
{
"cell_type": "code",
"execution_count": 234,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f9997e23280>"
]
},
"execution_count": 234,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pandas.DataFrame(get_truncated_normal(mean=7, sd=2, low=0, upp=10).rvs(100)).plot(kind='hist')"
]
},
{
"cell_type": "code",
"execution_count": 477,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f99b20eac40>"
]
},
"execution_count": 477,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"class Girl:\n",
" def __init__(self):\n",
" self.Hotness = round(X.rvs(), 1)\n",
" preferences_generator = get_truncated_normal(mean=self.Hotness + 1, sd=2, low=0, upp=10)\n",
" self.Preferences = preferences_generator.rvs(100)\n",
" self.Chemistry = random.randrange(0, 20) # if you're close to this magic number (closeness defined by ChemistryThreshold), then she thinks you've got chemistry\n",
" self.ChemistryThreshold = random.randrange(0, 2) # Threshold above which you're considered to have \"clicked\" with her\n",
" def __repr__(self):\n",
" return \"Girl: {}\".format(self.Hotness)\n",
" def as_dict(self):\n",
" return {'hotness': self.Hotness}\n",
" def does_she_think_youre_hot(self, your_hotness):\n",
" if your_hotness > random.choice(self.Preferences):\n",
" return True\n",
" return False\n",
" def do_you_have_chemistry(self, your_chemistry):\n",
" if self.Chemistry-self.ChemistryThreshold <= your_chemistry <= self.Chemistry+self.ChemistryThreshold:\n",
" return True\n",
" return False\n",
"girls = [Girl() for i in range(3000)]\n",
"girls_df = pandas.DataFrame([x.as_dict() for x in girls], columns=[\"hotness\"])\n",
"girls_df.plot(kind='hist')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Test: if you're not hot, you don't have a chance in hell. Oh and you're a creep."
]
},
{
"cell_type": "code",
"execution_count": 478,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"6.8 [False, False, False, False, False, False, False, False, False, False]\n"
]
}
],
"source": [
"r = [girls[0].does_she_think_youre_hot(5) for i in range(10)]\n",
"print(girls[0].Hotness, r)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Test: if you're super hot, she likes you almost all the time (barring prejudices and bad experiences with hot guys)"
]
},
{
"cell_type": "code",
"execution_count": 479,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"6.4 [False, True, False, True, True, True, False, True, True, True]\n"
]
}
],
"source": [
"r = [girls[1].does_she_think_youre_hot(9) for i in range(10)]\n",
"print(girls[1].Hotness, r)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Test: if your wavelength is somewhere around the same as hers, does she think you have chemistry? (she should)"
]
},
{
"cell_type": "code",
"execution_count": 480,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"9 1\n"
]
},
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 480,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"print(girls[0].Chemistry, girls[0].ChemistryThreshold)\n",
"girls[0].do_you_have_chemistry(5)"
]
},
{
"cell_type": "code",
"execution_count": 571,
"metadata": {},
"outputs": [],
"source": [
"class Me:\n",
" def __init__(self):\n",
" self.Hotness = 8\n",
" self.Chemistry = 17\n",
" self.GotRejected = 0\n",
" self.RejectedOthers = 0\n",
" self.GotAccepted = 0\n",
" self.GirlHistory = pandas.Series(dtype=\"float64\")\n",
"me = Me()\n",
"my_hotness_threshold = 8\n",
"my_rejection_percentage = 0.97"
]
},
{
"cell_type": "code",
"execution_count": 572,
"metadata": {},
"outputs": [],
"source": [
"%%capture\n",
"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # \n",
"# List of all the state variables in the system and their initial values\n",
"initial_conditions = {\n",
" 'Hotness': me.Hotness,\n",
" 'GotRejected': me.GotRejected,\n",
" 'RejectedOthers': me.RejectedOthers,\n",
" 'GotAccepted': me.GotAccepted,\n",
" 'GirlHistory': me.GirlHistory,\n",
"}\n",
"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # \n",
"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # \n",
"def try_get_girl_hotness_match(me, girl):\n",
" # If she likes me, got_rejected = 0, got_accepted = 1, girl\n",
" if girl.does_she_think_youre_hot(me.Hotness):\n",
" return 0, 1, girl\n",
" # Else got_rejected = 1\n",
" return 1, 0, None\n",
"\n",
"def try_get_girl_hotness_chemistry_match(me, girl):\n",
" # If she likes me, got_rejected = 0, got_accepted = 1, girl\n",
" if girl.does_she_think_youre_hot(me.Hotness) and girl.do_you_have_chemistry(me.Chemistry):\n",
" return 0, 1, girl\n",
" # Else got_rejected = 1\n",
" return 1, 0, None\n",
"def try_get_girl_flat_percentage(me, girl):\n",
" if random.random() <= my_rejection_percentage:\n",
" return 1, 0, None\n",
" else:\n",
" return 0, 1, girl\n",
"\n",
"def dating_policy(params, step, sL, s):\n",
" g = random.choice(girls)\n",
" if g.Hotness > my_hotness_threshold:\n",
"# got_rejected, got_accepted, girl = try_get_girl_flat_percentage(me, g)\n",
"# got_rejected, got_accepted, girl = try_get_girl_hotness_match(me, g)\n",
" got_rejected, got_accepted, girl = try_get_girl_hotness_chemistry_match(me, g)\n",
" return({'add_to_GotRejected': got_rejected, 'add_to_RejectedOthers': 0, 'add_to_GotAccepted': got_accepted, 'add_to_GirlHistory': girl})\n",
" else:\n",
" return({'add_to_GotRejected': 0, 'add_to_RejectedOthers': 1, 'add_to_GotAccepted': 0, 'add_to_GirlHistory': None})\n",
" \n",
"# State functions definition: they are just dumb and update the state variables\n",
"def update_GotRejected(params, step, sL, s, _input):\n",
" y = 'GotRejected'\n",
" x = s['GotRejected'] + _input['add_to_GotRejected']\n",
" return (y, x)\n",
"\n",
"def update_RejectedOthers(params, step, sL, s, _input):\n",
" y = 'RejectedOthers'\n",
" x = s['RejectedOthers'] + _input['add_to_RejectedOthers']\n",
" return (y, x)\n",
"\n",
"def update_GotAccepted(params, step, sL, s, _input):\n",
" y = 'GotAccepted'\n",
" x = s['GotAccepted'] + _input['add_to_GotAccepted']\n",
" return (y, x)\n",
"\n",
"def update_GirlHistory(params, step, sL, s, _input):\n",
" y = 'GirlHistory'\n",
" x = s['GirlHistory']\n",
" if _input.get('add_to_GirlHistory'):\n",
" x = x.append(pandas.Series([_input['add_to_GirlHistory'].Hotness]))\n",
" return (y, x)\n",
"\n",
"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # \n",
"# In the Partial State Update Blocks, the user specifies if state update functions will be run in series or in parallel\n",
"partial_state_update_blocks = [\n",
" { \n",
" 'policies': {\n",
" 'dating_policy': dating_policy\n",
" },\n",
" 'variables': { # The following state variables will be updated simultaneously\n",
" 'GotRejected': update_GotRejected,\n",
" 'RejectedOthers': update_RejectedOthers,\n",
" 'GotAccepted': update_GotAccepted,\n",
" 'GirlHistory': update_GirlHistory,\n",
" }\n",
" }\n",
"]\n",
"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # \n"
]
},
{
"cell_type": "code",
"execution_count": 573,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
" __________ ____ \n",
" ________ __ _____/ ____/ | / __ \\\n",
" / ___/ __` / __ / / / /| | / / / /\n",
" / /__/ /_/ / /_/ / /___/ ___ |/ /_/ / \n",
" \\___/\\__,_/\\__,_/\\____/_/ |_/_____/ \n",
" by BlockScience\n",
" \n",
"Execution Mode: single_proc: [<cadCAD.configuration.Configuration object at 0x7f9942a45c70>]\n",
"Configurations: [<cadCAD.configuration.Configuration object at 0x7f9942a45c70>]\n"
]
}
],
"source": [
"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # \n",
"# Settings of general simulation parameters, unrelated to the system itself\n",
"# `T` is a range with the number of discrete units of time the simulation will run for;\n",
"# `N` is the number of times the simulation will be run (Monte Carlo runs)\n",
"# In this example, we'll run the simulation onjjjce (N=1) and its duration will be of 10 timesteps\n",
"# We'll cover the `M` key in a future article. For now, let's leave it empty\n",
"simulation_parameters = {\n",
" 'T': range(1000),\n",
" 'N': 30,\n",
" 'M': {}\n",
"}\n",
"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # \n",
"\n",
"from cadCAD.configuration import Configuration\n",
"\n",
"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # \n",
"# The configurations above are then packaged into a `Configuration` object\n",
"config = Configuration(initial_state=initial_conditions, #dict containing variable names and initial values\n",
" partial_state_update_blocks=partial_state_update_blocks, #dict containing state update functions\n",
" sim_config=simulation_parameters #dict containing simulation parameters\n",
" )\n",
"\n",
"from cadCAD.engine import ExecutionMode, ExecutionContext, Executor\n",
"exec_mode = ExecutionMode()\n",
"exec_context = ExecutionContext(exec_mode.single_proc)\n",
"executor = Executor(exec_context, [config]) # Pass the configuration object inside an array\n",
"raw_result, tensor = executor.execute() # The `execute()` method returns a tuple; its first elements contains the raw results\n",
"\n",
"%matplotlib inline\n",
"import pandas as pd\n",
"from pprint import pprint\n",
"import matplotlib.pyplot as plt\n",
"df = pd.DataFrame(raw_result)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Endgame results"
]
},
{
"cell_type": "code",
"execution_count": 574,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 4\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Hotness</th>\n",
" <th>GotRejected</th>\n",
" <th>RejectedOthers</th>\n",
" <th>GotAccepted</th>\n",
" <th>GirlHistory</th>\n",
" <th>run</th>\n",
" <th>substep</th>\n",
" <th>timestep</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>8</td>\n",
" <td>65</td>\n",
" <td>933</td>\n",
" <td>2</td>\n",
" <td>0 8.5\n",
"0 8.7\n",
"dtype: float64</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>8</td>\n",
" <td>41</td>\n",
" <td>956</td>\n",
" <td>3</td>\n",
" <td>0 8.5\n",
"0 9.4\n",
"0 8.1\n",
"dtype: float64</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>8</td>\n",
" <td>57</td>\n",
" <td>941</td>\n",
" <td>2</td>\n",
" <td>0 8.9\n",
"0 8.8\n",
"dtype: float64</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>8</td>\n",
" <td>56</td>\n",
" <td>942</td>\n",
" <td>2</td>\n",
" <td>0 8.9\n",
"0 8.7\n",
"dtype: float64</td>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>8</td>\n",
" <td>54</td>\n",
" <td>943</td>\n",
" <td>3</td>\n",
" <td>0 9.0\n",
"0 9.0\n",
"0 8.7\n",
"dtype: float64</td>\n",
" <td>5</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>8</td>\n",
" <td>60</td>\n",
" <td>939</td>\n",
" <td>1</td>\n",
" <td>0 9.6\n",
"dtype: float64</td>\n",
" <td>6</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>8</td>\n",
" <td>53</td>\n",
" <td>943</td>\n",
" <td>4</td>\n",
" <td>0 8.5\n",
"0 9.0\n",
"0 8.3\n",
"0 8.7\n",
"dtype: flo...</td>\n",
" <td>7</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>8</td>\n",
" <td>59</td>\n",
" <td>940</td>\n",
" <td>1</td>\n",
" <td>0 8.9\n",
"dtype: float64</td>\n",
" <td>8</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>8</td>\n",
" <td>56</td>\n",
" <td>941</td>\n",
" <td>3</td>\n",
" <td>0 8.7\n",
"0 8.5\n",
"0 9.6\n",
"dtype: float64</td>\n",
" <td>9</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>8</td>\n",
" <td>45</td>\n",
" <td>953</td>\n",
" <td>2</td>\n",
" <td>0 8.3\n",
"0 8.7\n",
"dtype: float64</td>\n",
" <td>10</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>8</td>\n",
" <td>55</td>\n",
" <td>945</td>\n",
" <td>0</td>\n",
" <td>Series([], dtype: float64)</td>\n",
" <td>11</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>8</td>\n",
" <td>46</td>\n",
" <td>953</td>\n",
" <td>1</td>\n",
" <td>0 8.7\n",
"dtype: float64</td>\n",
" <td>12</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>8</td>\n",
" <td>43</td>\n",
" <td>956</td>\n",
" <td>1</td>\n",
" <td>0 8.7\n",
"dtype: float64</td>\n",
" <td>13</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>8</td>\n",
" <td>44</td>\n",
" <td>954</td>\n",
" <td>2</td>\n",
" <td>0 9.4\n",
"0 9.8\n",
"dtype: float64</td>\n",
" <td>14</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>8</td>\n",
" <td>51</td>\n",
" <td>948</td>\n",
" <td>1</td>\n",
" <td>0 8.9\n",
"dtype: float64</td>\n",
" <td>15</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>8</td>\n",
" <td>56</td>\n",
" <td>940</td>\n",
" <td>4</td>\n",
" <td>0 8.7\n",
"0 9.0\n",
"0 9.4\n",
"0 8.7\n",
"dtype: flo...</td>\n",
" <td>16</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>8</td>\n",
" <td>50</td>\n",
" <td>946</td>\n",
" <td>4</td>\n",
" <td>0 8.7\n",
"0 8.4\n",
"0 8.1\n",
"0 8.1\n",
"dtype: flo...</td>\n",
" <td>17</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>8</td>\n",
" <td>61</td>\n",
" <td>937</td>\n",
" <td>2</td>\n",
" <td>0 9.6\n",
"0 8.1\n",
"dtype: float64</td>\n",
" <td>18</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>8</td>\n",
" <td>46</td>\n",
" <td>951</td>\n",
" <td>3</td>\n",
" <td>0 8.5\n",
"0 8.7\n",
"0 8.5\n",
"dtype: float64</td>\n",
" <td>19</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>8</td>\n",
" <td>66</td>\n",
" <td>932</td>\n",
" <td>2</td>\n",
" <td>0 9.0\n",
"0 8.3\n",
"dtype: float64</td>\n",
" <td>20</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>8</td>\n",
" <td>49</td>\n",
" <td>950</td>\n",
" <td>1</td>\n",
" <td>0 8.5\n",
"dtype: float64</td>\n",
" <td>21</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>8</td>\n",
" <td>48</td>\n",
" <td>949</td>\n",
" <td>3</td>\n",
" <td>0 9.6\n",
"0 9.4\n",
"0 9.3\n",
"dtype: float64</td>\n",
" <td>22</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>8</td>\n",
" <td>50</td>\n",
" <td>949</td>\n",
" <td>1</td>\n",
" <td>0 8.1\n",
"dtype: float64</td>\n",
" <td>23</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>8</td>\n",
" <td>54</td>\n",
" <td>943</td>\n",
" <td>3</td>\n",
" <td>0 8.4\n",
"0 9.0\n",
"0 9.6\n",
"dtype: float64</td>\n",
" <td>24</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>8</td>\n",
" <td>51</td>\n",
" <td>947</td>\n",
" <td>2</td>\n",
" <td>0 8.3\n",
"0 8.4\n",
"dtype: float64</td>\n",
" <td>25</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>8</td>\n",
" <td>61</td>\n",
" <td>935</td>\n",
" <td>4</td>\n",
" <td>0 8.7\n",
"0 8.1\n",
"0 8.4\n",
"0 8.9\n",
"dtype: flo...</td>\n",
" <td>26</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>8</td>\n",
" <td>58</td>\n",
" <td>941</td>\n",
" <td>1</td>\n",
" <td>0 8.9\n",
"dtype: float64</td>\n",
" <td>27</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>8</td>\n",
" <td>54</td>\n",
" <td>943</td>\n",
" <td>3</td>\n",
" <td>0 8.7\n",
"0 8.9\n",
"0 8.5\n",
"dtype: float64</td>\n",
" <td>28</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>8</td>\n",
" <td>54</td>\n",
" <td>943</td>\n",
" <td>3</td>\n",
" <td>0 8.3\n",
"0 8.3\n",
"0 8.7\n",
"dtype: float64</td>\n",
" <td>29</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>8</td>\n",
" <td>48</td>\n",
" <td>948</td>\n",
" <td>4</td>\n",
" <td>0 8.5\n",
"0 8.4\n",
"0 8.5\n",
"0 8.3\n",
"dtype: flo...</td>\n",
" <td>30</td>\n",
" <td>1</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Hotness GotRejected RejectedOthers GotAccepted \\\n",
"0 8 65 933 2 \n",
"1 8 41 956 3 \n",
"2 8 57 941 2 \n",
"3 8 56 942 2 \n",
"4 8 54 943 3 \n",
"5 8 60 939 1 \n",
"6 8 53 943 4 \n",
"7 8 59 940 1 \n",
"8 8 56 941 3 \n",
"9 8 45 953 2 \n",
"10 8 55 945 0 \n",
"11 8 46 953 1 \n",
"12 8 43 956 1 \n",
"13 8 44 954 2 \n",
"14 8 51 948 1 \n",
"15 8 56 940 4 \n",
"16 8 50 946 4 \n",
"17 8 61 937 2 \n",
"18 8 46 951 3 \n",
"19 8 66 932 2 \n",
"20 8 49 950 1 \n",
"21 8 48 949 3 \n",
"22 8 50 949 1 \n",
"23 8 54 943 3 \n",
"24 8 51 947 2 \n",
"25 8 61 935 4 \n",
"26 8 58 941 1 \n",
"27 8 54 943 3 \n",
"28 8 54 943 3 \n",
"29 8 48 948 4 \n",
"\n",
" GirlHistory run substep timestep \n",
"0 0 8.5\n",
"0 8.7\n",
"dtype: float64 1 1 1000 \n",
"1 0 8.5\n",
"0 9.4\n",
"0 8.1\n",
"dtype: float64 2 1 1000 \n",
"2 0 8.9\n",
"0 8.8\n",
"dtype: float64 3 1 1000 \n",
"3 0 8.9\n",
"0 8.7\n",
"dtype: float64 4 1 1000 \n",
"4 0 9.0\n",
"0 9.0\n",
"0 8.7\n",
"dtype: float64 5 1 1000 \n",
"5 0 9.6\n",
"dtype: float64 6 1 1000 \n",
"6 0 8.5\n",
"0 9.0\n",
"0 8.3\n",
"0 8.7\n",
"dtype: flo... 7 1 1000 \n",
"7 0 8.9\n",
"dtype: float64 8 1 1000 \n",
"8 0 8.7\n",
"0 8.5\n",
"0 9.6\n",
"dtype: float64 9 1 1000 \n",
"9 0 8.3\n",
"0 8.7\n",
"dtype: float64 10 1 1000 \n",
"10 Series([], dtype: float64) 11 1 1000 \n",
"11 0 8.7\n",
"dtype: float64 12 1 1000 \n",
"12 0 8.7\n",
"dtype: float64 13 1 1000 \n",
"13 0 9.4\n",
"0 9.8\n",
"dtype: float64 14 1 1000 \n",
"14 0 8.9\n",
"dtype: float64 15 1 1000 \n",
"15 0 8.7\n",
"0 9.0\n",
"0 9.4\n",
"0 8.7\n",
"dtype: flo... 16 1 1000 \n",
"16 0 8.7\n",
"0 8.4\n",
"0 8.1\n",
"0 8.1\n",
"dtype: flo... 17 1 1000 \n",
"17 0 9.6\n",
"0 8.1\n",
"dtype: float64 18 1 1000 \n",
"18 0 8.5\n",
"0 8.7\n",
"0 8.5\n",
"dtype: float64 19 1 1000 \n",
"19 0 9.0\n",
"0 8.3\n",
"dtype: float64 20 1 1000 \n",
"20 0 8.5\n",
"dtype: float64 21 1 1000 \n",
"21 0 9.6\n",
"0 9.4\n",
"0 9.3\n",
"dtype: float64 22 1 1000 \n",
"22 0 8.1\n",
"dtype: float64 23 1 1000 \n",
"23 0 8.4\n",
"0 9.0\n",
"0 9.6\n",
"dtype: float64 24 1 1000 \n",
"24 0 8.3\n",
"0 8.4\n",
"dtype: float64 25 1 1000 \n",
"25 0 8.7\n",
"0 8.1\n",
"0 8.4\n",
"0 8.9\n",
"dtype: flo... 26 1 1000 \n",
"26 0 8.9\n",
"dtype: float64 27 1 1000 \n",
"27 0 8.7\n",
"0 8.9\n",
"0 8.5\n",
"dtype: float64 28 1 1000 \n",
"28 0 8.3\n",
"0 8.3\n",
"0 8.7\n",
"dtype: float64 29 1 1000 \n",
"29 0 8.5\n",
"0 8.4\n",
"0 8.5\n",
"0 8.3\n",
"dtype: flo... 30 1 1000 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"end_game = df.loc[df['timestep'] == df['timestep'].max()].sort_values(['run'])\n",
"end_game = end_game.reset_index(drop=True)\n",
"print(end_game['GotAccepted'].min(), end_game['GotAccepted'].max())\n",
"display(end_game)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Hotness Distribution of Girls who accepted you\n",
"Again, the assumption is that if the the graph looks discrete, then you don't have enough choices to feel sexually free."
]
},
{
"cell_type": "code",
"execution_count": 575,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "dark"
},
"output_type": "display_data"
}
],
"source": [
"for i in end_game.index:\n",
" end_game['GirlHistory'][i].plot(kind='hist')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## GotRejected vs RejectedOthers"
]
},
{
"cell_type": "code",
"execution_count": 576,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1080x720 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.style.use('dark_background')\n",
"df.plot('timestep', ['GotRejected', 'RejectedOthers', 'GotAccepted'], grid=True, \n",
" colormap = 'RdYlGn',\n",
" figsize=(15,10),\n",
" xticks=range(0, df['timestep'].max(), 100),\n",
");"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Conclusion\n",
"1. Don't be choosy. If you're a 5 aiming for 7s, you'll most likely spend much of your time being desperate/insecure in a relationship, or lonely.\n",
"\n",
"2. Try your utmost to improve your looks. It changes the playing field a lot. I feel that the hotness+chemistry filter mechanism most closely mirrors what happens in real life.\n",
"\n",
"3. Even if you end up becoming a '9', you'll still mostly date 5s and 6s. Why? Simply because there aren't that many 8s to go around. Again, if you move to a place where 8s are abundant, they will become the new 5s. Realize that there are many dimensions other than beauty."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Credits\n",
"Many thanks to [Good Looking Loser](https://www.goodlookingloser.com/laid/picking-up-women/how-to-lower-your-standards-and-keep-your-dignity-and-boner), David Deida, [Strength by Sonny](https://strengthbysonny.com/2014/02/12/how-to-get-girls-part-i/), [Wall Street Playboys](https://wallstreetplayboys.com/), and Pook (The Book of Pook). No thanks to Neil Strauss and The Game.\n",
"\n",
"Although if I had just read a sex-ed book for high schoolers I probably wouldn't need to spend 8 years figuring this out."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.1"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
attrs==19.3.0
backcall==0.1.0
bleach==3.1.1
cadCAD==0.3.1
cycler==0.10.0
decorator==4.4.1
defusedxml==0.6.0
dill==0.3.1.1
entrypoints==0.3
fn==0.4.3
funcy==1.14
ipdb==0.12.3
ipykernel==5.1.4
ipython==7.12.0
ipython-genutils==0.2.0
ipywidgets==7.5.1
jedi==0.16.0
Jinja2==2.11.1
jsonschema==3.2.0
jupyter==1.0.0
jupyter-client==5.3.4
jupyter-console==6.1.0
jupyter-core==4.6.3
jupyterthemes==0.20.0
kiwisolver==1.1.0
lesscpy==0.14.0
MarkupSafe==1.1.1
matplotlib==3.1.3
mistune==0.8.4
multiprocess==0.70.9
nbconvert==5.6.1
nbformat==5.0.4
notebook==6.0.3
numpy==1.18.1
pandas==1.0.1
pandoc==1.0.2
pandocfilters==1.4.2
parso==0.6.1
pathos==0.2.5
pexpect==4.8.0
pickleshare==0.7.5
ply==3.11
pox==0.2.7
ppft==1.6.6.1
prometheus-client==0.7.1
prompt-toolkit==3.0.3
ptyprocess==0.6.0
Pygments==2.5.2
pyparsing==2.4.6
pyrsistent==0.15.7
python-dateutil==2.8.1
pytz==2019.3
pyzmq==18.1.1
qtconsole==4.6.0
scipy==1.4.1
Send2Trash==1.5.0
six==1.14.0
tabulate==0.8.6
terminado==0.8.3
testpath==0.4.4
tornado==6.0.3
traitlets==4.3.3
wcwidth==0.1.8
webencodings==0.5.1
widgetsnbextension==3.5.1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment