# List of Objective functions in HAS

## Existing Optimization Models

Minimize an unweighted value

```{
"minimize":{
"attribute":
{
"distance_between":[
"customer_loc",
"vG"
]
}
}
}```

Minimize a weighted value

```{
"minimize": {
"attribute": {
"product": [
200,
{
"distance_between": [
"customer_loc",
"vG"
]
}
]
}
}
}```

Maximize an unweighted value

```{
"maximize": {
"attribute": {
"reliability": [
"URLLC"
]
}
}
}```

Maximize a weighted value

```{
"maximize": {
"attribute": {
"product": [
200,
{
"reliability": [
"URLLC"
]
}
]
}
}
}

```

Minimize the sum of unweighted values

```{
"minimize": {
"sum": [
{
"distance_between": [
"customer_loc",
"vG"
]
},
{
"distance_between": [
"customer_loc",
"vG"
]
}
]
}
}

```

Minimize the sum of weighted values

```{
"minimize": {
"sum": [
{
"product": [
100,
{
"distance_between": [
"customer_loc",
"vG"
]
}
]
},
{
"product": [
200,
{
"hpa_score": [
"vG"
]
}
]
}
]
}
}

```

## New Optimization Model

Objective Function Object

AttributeRequiredContentValuesDescription
goalYStringminimize, maximizeThe goal of the optimization
operation_functionYOperation function Object
The operation function that has to be optimized

Operation function object

AttributeRequiredContentValuesDescription
operatorYString

sum, min, max

The operation which will be a part of the objective function
operandsY

List of operand object

EIther an operation-function or a function

The operand on which the operation is to be performed.

The operand can be an attribute or result of a function

operation-function operand object

AttributeRequiredContentValuesDescription
normalizationNnormalization object
Set of values used to normalize the operand
weightNDecimalDefault: 1.0Weight of the function
operation_functionNoperation function object

function operand object

AttributeRequiredContentValuesDescription
normalizationNnormalization object
Set of values used to normalize the operand
weightNDecimalDefault: 1.0Weight of the function
functionNString

distance_between,

latency_between, attribute

Function to be performed on the parameters
fucntion_paramsNdict

parameters on which the function will be applied.

The parameters will change for each function.

Normalization object

AttributeRequiredContentValuesDescription
startYDecimal
Start of the range
endYDecimal
End of the range

### JSON Schema

opt_schema.json

Examples

1. Minimize an attribute of the demand

```{
"goal": "minimize",
"operation_function": {
"operands": [
{
"function": "attribute",
"params": {
"attribute": "latency",
"demand": "urllc_core"
}
}
],
"operator": "sum"
}
}```

2. Minimize the sum of the distance between the demand and the customer location.

objective function - distance_between(demand, location) + distance_between(demand, location)

```{
"goal": "minimize",
"operation_function": {
"operator": "sum",
"operands": [
{
"function": "distance_between",
"weight": 1.0,
"params": {
"demand": "vG",
"location": "customer_loc"
}
},
{
"function": "distance_between",
"weight": 1.0,
"params": {
"demand": "vFW",
"location": "customer_loc"
}
}
]
}
}```

Scenario:

Minimize the sum of latencies of slice subnets

objective function - latency(demand) + latency(demand)

```{
"goal": "minimize",
"operation_function": {
"operator": "sum",
"operands": [
{
"function": "attribute",
"weight": 1.0,
"params": {
"demand": "urllc_core",
"attribute": "latency"
}
},
{
"function": "attribute",
"weight": 1.0,
"params": {
"demand": "urllc_ran",
"attribute": "latency"
}
}
]
}
}```

Scenario:

Max  [ sum ( W_bw *  min (ran_nssi_bw, core_nssi_bw, tr_nssi_bw), 1/(W_lat * ( sum (w1 * ran_nssi_lat, w2 core_lat, W3* tn_lat)) ) ]

```{
"goal": "maximize",
"operation_function": {
"operator": "sum",
"operands": [
{
"operation_function": {
"operator": "min",
"operands": [
{
"weight": 1.0,
"function": "attribute",
"params": {
"demand": "urllc_core",
"attribute": "throughput"
}
},
{
"weight": 1.0,
"function": "attribute",
"params": {
"demand": "urllc_ran",
"attribute": "throughput"
}
},
{
"weight": 1.0,
"function": "attribute",
"params": {
"demand": "urllc_transport",
"attribute": "throughput"
}
}
]
},
"normalization": {
"start": 100,
"end": 1000
},
"weight": 2.0
},
{
"operation_function": {
"operator": "sum",
"operands": [
{
"weight": 1.0,
"function": "attribute",
"params": {
"demand": "urllc_core",
"attribute": "latency"
}
},
{
"weight": 1.0,
"function": "attribute",
"params": {
"demand": "urllc_ran",
"attribute": "latency"
}
},
{
"weight": 1.0,
"function": "attribute",
"params": {
"demand": "urllc_transport",
"attribute": "latency"
}
}
]
},
"normalization": {
"start": 50,
"end": 5
},
"weight": 1.0
}
]
}
}```

normalization:

function(value, range(start, end), weight)

All ranges are converted to 0 to 1. The inverse operation is not needed since it is already implied in the range.

normalized value = (value - start) / (end-start)

Eg:

latency range: 50 ms to 5 ms

candidate latencyNormalized value
20 ms0.667
40 ms0.222

throughput range: 100 Mbps to 1000Mbps

candidate throughputNormalized value
300 Mbps0.222
800 Mbps0.778
• No labels

## 1 Comment

1. krishna moorthy, Thanks for listing these out. For the template/interface, these are good to begin with. In the implementation, we could fold the weighted and non-weighted case into same code block. This can be done by having default weight of 1 for all operands in the objective function. If the template provides a weight, we'd override the default with the weight provided. This way, the implementation can always assume a weight to be available. Please let me know if this makes sense.