Discord
@b/technological-progress
Simulation
1
4
Public

Technological Progress

Simplified model of civilizational tech tree dynamics

Technological progress

The main part of the model consists of research projects, which are lists of various types of task. Civilization completes tasks to complete research projects, and when projects get finished, civilization gets a "bonus" which allows it to do new types of task, and to do some old types faster.

The projects, the lists of tasks needed to complete them, the speeds at which civilization can do the tasks, and the bonuses granted by completing projects are all randomly generated, using a normal distribution and with parameters you can change in the parameters. Other important parameters can be changed in the UI also, such as how many task types are "off limits" for technological improvement, and how many task types are "temporarily off limits".

As explained so far, the model represents better technology leading to more research directions (more types of task become available) and faster progress (civilization can do tasks in less time).

Projects are displayed as blocks, arranged on the x-axis by number of tasks associated with the project, and on the y-axis by diversity of task types. If a project is blocked from being researched, because it needs to solve a task that is currently "locked", the block's color is set as orange. When a project is completed, it's set as green.

Upon completion of a research project a random task is selected - if it's currently locked, it will be unlocked and it can be researched. If it was already unlocked, then a random number is generated and compared to either the machine or human current task time (number of time steps to complete a task). If it is less than the current task time, the new task time is set for the task.

Tasks can either be worked on by humans, or machines. The fastest approach will be used. Certain tasks can only be solved by machines. The distribution of human vs machine tasks is configurable as a parameter.

There are several kinds of diminishing returns and several kinds of increasing returns in the model.

Diminishing:

  • Project bonuses work as follows: Pick a random bag of tasks, pick random speeds for each task, compare the results to the current state-of-the-art speeds on those tasks and update the state of the art accordingly. Thus, the faster civilization already is at completing a task, the more projects will need to be completed (on average) to improve speed at that task further.
  • There is the usual "low-hanging fruit" effect where the projects which can get done quickly do so, leaving harder and harder projects remaining.

Increasing:

  • The more projects you do, the more bonuses you get. This makes you faster at completing projects...
  • And opens up new projects to work on, some of which will be low-hanging fruit.

Results

The simulation tends to produce progress (specifically, in the metric of finished projects) in an exponential pattern, leveling off into an s-curve. This occurs in almost every scenario, though it's possible to achieve stagnation (linear growth that flattens), with a sufficiently high initial number of locked projects. For instance a starting condition of 10 locked human task, 10 machine only tasks, and 70 locked machine tasks, out of a total of 100 task types, resulted in stagnation.

Doubts about the accuracy of the model & ideas for things to add:

  • Most importantly, there are probably major flawed assumptions in building this model that I haven't realized yet. I don't know what I don't know.
  • I worry that the results depend in a brittle fashion on the probability distributions and ranges that I use to generate the projects. In other words, I'm worried that the results are not robust to hidden assumptions.

Next steps:

  • Adding experiments to explore a wider parameter space
  • Adding a much richer economy in the model, with different factions buying and selling things as they separately advance up the tech tree.

charts

Parameters

  • "num_projects": number of projects in the simulation
  • "base_task_num": median number of tasks each project has
  • "min_num_tasks": the minimum number of tasks a project must have
  • "max_num_tasks": the maximum number of tasks a project can have
  • "max_num_task_types": the maximum number of task types
  • "num_tasks_locked": number of tasks locked for humans (can't be solved without completing another research project)
  • "num_tasks_locked_machines": number of tasks locked for machines (can't be solved without completing another research project)
  • "num_machine_only": number of tasks that can only be solved by machines
  • "h_task_range": range of timesteps needed for completing a human task (by default drawn from a uniform dist)
  • "m_task_range": range of timesteps for completing a machine task (by default drawn from a uniform dist)
  • "generate_tasks": (default: true) if true generates tasks from specified params
  • "task_types": manually set the task types (only applies if generate_tasks is false)
  • "task_types_prob": manually set the distribution of task types (only applies if generate_tasks is false)

-"task_times": manually set the time to completion for each task (only applies if generate_tasks is false)

  • "topology": visualization parameters, see the docs for more details

Original model by Daniel Kokotajlo, reproduced in HASH by Daniel Kokotajlo and Ben Goldhaber