Enterprise Digital Twin

An Enterprise Digital Twin of a Professional Service Firm

Enterprise Digital Twin

We’re currently build a digital twin for transentis and the model here contains the simulation part. Please check our current meetup series on this topic - you can download slides from the meetup and also watch the meetup recordings.

Introduction

Agents

  • Consultant. Available or Busy
  • Project. acquired->ready->started->fully_staffed->completed

Revenue

  • From project assignments

Cost

  • Consultant Wages
  • Overhead cost
# Start BPTK and automatically read the scenarios found in the scenarios folder
# this also loads all the Python classes referenced in the scenarios, so we are immediately ready 
# to run scenarios and plot results.

from BPTK_Py.bptk import bptk 

bptk = bptk()
bptk.list_scenarios()

*** smEDT ***
     two_consultants
     three_consultants
     base
     interactive

Base Scenario

bptk.plot_scenarios(
    scenario_managers=["smEDT"],
    kind="area",
    scenarios=["base"],
    title="Project Lifecycle",
    agents=["project"],
    agent_states=["acquired","ready","started","fully_staffed","completed"],
    series_names={
         "smEDT_base_project_acquired" : "Acquired",
         "smEDT_base_project_ready" : "Ready",
         "smEDT_base_project_started" : "Started",
         "smEDT_base_project_fully_staffed" : "Fully Staffed",
         "smEDT_base_project_completed" : "Completed",
     }
)

bptk.plot_scenarios(
    scenario_managers=["smEDT"],
    kind="area",
    scenarios=["base"],
    title="Consultants",
    agents=["consultant"],
    agent_states=["available","busy"],
    series_names={
         "smEDT_base_consultant_available" : "Available",
         "smEDT_base_consultant_busy" : "Busy"
     }
)

bptk.plot_scenarios(
    scenario_managers=["smEDT"],
    kind="area",
    scenarios=["base"],
    title="Revenue",
    agents=["controlling"],
    agent_states=["active"],
    agent_properties=["revenue"],
    agent_property_types=["total"]

)

bptk.plot_scenarios(
    scenario_managers=["smEDT"],
    kind="area",
    scenarios=["base"],
    title="Expenses",
    agents=["controlling"],
    agent_states=["active"],
    agent_properties=["expenses"],
    agent_property_types=["total"]

)

bptk.plot_scenarios(
    scenario_managers=["smEDT"],
    kind="area",
    scenarios=["base"],
    title="Earnings",
    agents=["controlling"],
    agent_states=["active"],
    agent_properties=["earnings"],
    agent_property_types=["total"]

)

Two Consultants per Project Scenario

bptk.plot_scenarios(
    scenario_managers=["smEDT"],
    kind="area",
    scenarios=["two_consultants"],
    title="Project Lifecycle",
    agents=["project"],
    agent_states=["acquired","ready","started","fully_staffed","completed"],
    series_names={
         "smEDT_base_project_acquired" : "Acquired",
         "smEDT_base_project_ready" : "Ready",
         "smEDT_base_project_started" : "Started",
         "smEDT_base_project_fully_staffed" : "Fully Staffed",
         "smEDT_base_project_completed" : "Completed",
     }
)

bptk.plot_scenarios(
    scenario_managers=["smEDT"],
    kind="area",
    scenarios=["two_consultants"],
    title="Consultants",
    agents=["consultant"],
    agent_states=["available","busy"],
    series_names={
         "smEDT_base_consultant_available" : "Available",
         "smEDT_base_consultant_busy" : "Busy"
     }
)

bptk.plot_scenarios(
    scenario_managers=["smEDT"],
    kind="area",
    scenarios=["two_consultants"],
    title="Revenue",
    agents=["controlling"],
    agent_states=["active"],
    agent_properties=["revenue"],
    agent_property_types=["total"]

)

Three Consultants per Project

bptk.plot_scenarios(
    scenario_managers=["smEDT"],
    kind="area",
    scenarios=["three_consultants"],
    title="Project Lifecycle",
    agents=["project"],
    agent_states=["acquired","ready","started","fully_staffed","completed"],
    series_names={
         "smEDT_base_project_acquired" : "Acquired",
         "smEDT_base_project_ready" : "Ready",
         "smEDT_base_project_started" : "Started",
         "smEDT_base_project_fully_staffed" : "Fully Staffed",
         "smEDT_base_project_completed" : "Completed",
     }
)

bptk.plot_scenarios(
    scenario_managers=["smEDT"],
    kind="area",
    scenarios=["three_consultants"],
    title="Consultants",
    agents=["consultant"],
    agent_states=["available","busy"],
    series_names={
         "smEDT_base_consultant_available" : "Available",
         "smEDT_base_consultant_busy" : "Busy"
     }
)

bptk.plot_scenarios(
    scenario_managers=["smEDT"],
    kind="area",
    scenarios=["three_consultants"],
    title="Revenue",
    agents=["controlling"],
    agent_states=["active"],
    agent_properties=["revenue"],
    agent_property_types=["total"]

)

bptk.plot_scenarios(
    scenario_managers=["smEDT"],
    kind="area",
    scenarios=["three_consultants"],
    title="Accumulated Earnings",
    agents=["controlling"],
    agent_states=["active"],
    agent_properties=["accumulated_earnings"],
    agent_property_types=["total"]

)

Dashboard

Simple dashboard to experiment with the simulation.

%run src/dashboard.ipy
bptk.plot_scenarios(
    scenario_managers=["smEDT"],
    kind="area",
    scenarios=["interactive"],
    title="Project Lifecycle",
    agents=["project"],
    agent_states=["acquired","ready","started","fully_staffed","completed"],
    series_names={
         "smEDT_base_project_acquired" : "Acquired",
         "smEDT_base_project_ready" : "Ready",
         "smEDT_base_project_started" : "Started",
         "smEDT_base_project_fully_staffed" : "Fully Staffed",
         "smEDT_base_project_completed" : "Completed",
     }
)