# Parameter

A **parameter** is a property of the system that can be applied and tuned to change the system's behavior. Akamas optimizes systems by changing parameters to achieve the stated [goal](https://docs.akamas.io/akamas-docs/3.6/reference/glossary/goals-and-constraints) while respecting the defined [constraints](https://docs.akamas.io/akamas-docs/3.6/reference/glossary/goals-and-constraints).

Examples of a parameter include:

* Configuration knobs (e.g. JVM garbage collection type)
* Resource settings (e.g. amount of memory allocated to a Spark job)
* Algorithms settings (e.g. learning rate of a neural network)
* Architectural properties (e.g. how many caching layers in an enterprise application)
* Type of resources (e.g. AWS EC2 instance or EBS volume type)
* Any other thing (e.g. amount of sugar in your cookies)

The following table describes the parameter types:

| Parameter Type | Domain             | Akamas normalized domain                                                                                                                                                                                                                  |
| -------------- | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| REAL           | real values        | <p>Akamas normalizes the values</p><p>\[0.0, 10.0] → \[0.0, 1.0]</p>                                                                                                                                                                      |
| INTEGER        | integer values     | <p>Akamas converts the integer into real and then normalizes the values</p><p>\[0, 3] → \[0.0, 3.0] → \[0.0, 1.0]</p>                                                                                                                     |
| ORDINAL        | integer values     | <p>Akamas converts the category into real and then normalizes the values</p><p>\['a', 'b', 'c'] → \[0, 2] → \[0.0, 2.0] → \[0.0, 1.0]</p>                                                                                                 |
| CATEGORICAL    | categorical values | <p>Akamas converts each param value into a new param that may be either 1.0 (active) or 0.0 (inactive), only 1 of these new params can be "active" during each exp:</p><p>\['a', 'b', 'c'] → \[\[0.0, 1.0], \[0.0, 1.0], \[0.0, 1.0]]</p> |

## Construct

A parameter is described by the following properties:

* a **name** that uniquely identifies the parameter
* a **description** that clarifies the semantics of the parameter
* a **unit** that defines the unit of measurement used by the parameter

Although users can create parameters with any name, we suggest using the naming convention `context_parameter` where

* `context` refers to the technology or more general environment in which that metric is defined (e.g. elasticsearch, jvm, mysql, spark)
* `parameter` is the parameter name in the original context (e.g. gcType, numberOfExecutors)

This makes it possible to identify parameters more easily and avoid any potential name clash.

The construct to be used to define a parameter is described on the [Parameter template](https://docs.akamas.io/akamas-docs/3.6/reference/construct-templates/parameter-template) page.

## User Interface

Parameters are displayed in the Akamas UI when drilling down to each system component.

<figure><img src="https://4103111959-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrIhBBVa4sw46ol13SWX%2Fuploads%2Fgit-blob-81e1c21ffc188e689228f0724ea6e4ae5f40b96b%2FScreenshot%202022-12-22%20at%2009.16.08.png?alt=media" alt=""><figcaption></figcaption></figure>

For each optimization study, the **optimization scope** is the set of parameters that Akamas can change to achieve the defined optimization goal.

<figure><img src="https://4103111959-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrIhBBVa4sw46ol13SWX%2Fuploads%2Fgit-blob-063fd007155dca3fd2d6ed847bcb036fd4c67abf%2FScreenshot%202022-12-22%20at%2009.17.03.png?alt=media" alt=""><figcaption></figcaption></figure>
