navigation

Lokad’s Technical Documentation

Envision is the Domain Specific programming Language (DSL) developed by Lokad. Envision is dedicated to the predictive optimization of supply chains. While the Lokad platform includes many features beyond Envision, the bulk of Lokad’s capabilities are delivered through this DSL. In order to create a supply chain optimization app with Lokad, the Supply Chain Scientist is expected to write code, more specifically Envision code.

show label "Hello World" a1b1

This script produces a dashboard containing a single tile of type label, spreading over two cells A1 and B1 following the Excel grid conventions (letters designate columns, numbers designate lines).

In order to run this script, you need a Lokad account. Go to Projects, then click Create Envision Script, copy-and-paste the script above, and finally click Start Run. Once the run has completed, the corresponding dashboard becomes available in the sidebar on the right. All the examples below are also stand-alone scripts.

Envision supports numeric calculations.

// Text following a double-slash is a comment
a = 5
b = (a + 1) * 3 / 4
show scalar "Result will be 4.5" a1b1 with b // display a simple tile

Envision loads data from flat files, as commonly extracted from enterprise systems.

read "/sample/orders.csv" as Orders expect [date] with
  Date : date
  Quantity : number

show linechart "Daily Quantities" a1b4 with sum(Orders.Quantity)

Envision adopts array programming, processing whole columns at once, like SQL. Envision is space sensitive, much like Python.

table Orders = with // hard-coding a table
  [| as Sku, as Date          , as Qty, as Price |] // headers
  [| "a",    date(2020, 1, 17), 5     , 1.5      |]
  [| "b",    date(2020, 2, 5) , 3     , 7.0      |]
  [| "b",    date(2020, 2, 7) , 1     , 2.0      |]
  [| "c",    date(2020, 2, 15), 7     , 5.7      |]

Orders.Amount = Orders.Qty * Orders.Price // all lines at once

show table "Total Sales by SKU" a1b3 with
  Orders.Sku as "SKUs"                         // 1st column
  sum(Orders.Amount) as "Amount" { unit:"$" }  // 2nd column
  group by Orders.Sku

Envision approaches machine learning through Differentiable Programming.

table T = with
  [| as X, as Y |]
  [| 1, 3.1 |]
  [| 2, 3.9 |]
  [| 3, 5.1 |]
  [| 4, 6.0 |]
 
autodiff T with // automatic differentiation
  params a auto // 1st parameter 
  params b auto // 2nd parameter
  return (a * T.X + b - T.Y)^2 // loss for the stochatic gradient descent
 
show scalar "Learned" a1c1 with "y ≈ \{a} x + \{b}"

Envision approaches probabilistic modelling through a random variable algebra and Monte Carlo blocks.

montecarlo 1000 with // approximate π value
  x = random.uniform(-1, 1)
  y = random.uniform(-1, 1)
  inCircle = x^2 + y^2 < 1
  sample approxPi = avg(if inCircle then 4 else 0)
show scalar "π approximation" with approxPi // 3.22

Envision features a sub-language named StyleCode, inspired by CSS, to modify the tiles look & feel.

table Products = with
 [| as Product, as Color |]
 [| "pants", "blue" |]
 [| "shirt", "pink" |]
 [| "socks", "green"|]

show table "My Products" a1b3 with
  Products.Product { textColor: #[Products.Color] } // curly brackets for StyleCode
  Products.Color