Using the FuzzyLP package in R I have demonstrated simple linear optimization of a well defined linear problem using the crispLP function in a previous post. In that example basic simplex algorithm was applied to solve the problem.

In this post a linear optimization problem with fuzzy constraints has to be solved. The problem is a maximization problem and is stated below:

When solving this problem with the FuzzyLP package one should define the problem in vector-matrix syntax. The following template should be applied:

* c* is the coefficient vector of the objective function.

*is the vector containing the optimization variables.*

**x***is the coefficient matrix of the linear constraints and*

**A***is the vector containing the constraint values.*

**b****are the maximum contraint violation values that might occur (this is why the problem is fuzzy).**

*t*The FCLP.classicObjective function comprised by the FuzzyLP package will solve this problem while guaranteeing a certain minimum objective function value. the FCLP.classicObjective function will try to maximize beta, while at the same time guaranteeing a lower limit of the objective function value. In this example I want the solver to ensure an objective function value of at least 7.

In below coding example I model and solve the problem in R, using FCLP.classicObjective from FuzzyLP:

```
#install.packages("FuzzyLP")
library(FuzzyLP)
```

`## Warning: package 'FuzzyLP' was built under R version 3.6.2`

```
# define vectors and matrices that describe the problem at hand
c <- c(3,4)
A <- matrix(c(1,2,2,1,3,-1),nrow=3)
dir <- c("<=","<=","<=")
b <- c(1,1,1)
t <- c(4,5,3)
# solve the problem
solution <- FCLP.classicObjective(objective = c,
A = A,
dir = dir,
b = b,
t = t,
z0=7,
maximum=TRUE)
```

`## Bound reached, FCLP.fixedBeta with beta = 0.2413793 may obtain better results.`

`solution`

```
## beta x1 x2 objective
## [1,] 0.2413793 1.827586 0.3793103 7
```

It is recommended by the developers of this package to use another function, called FCLP.fixedBeta, after having executed FCLP.classicObjective. FCLP.fixedBeta will take a fixed value for beta and execute basic simplex for optimization.

In below example you can see how I use FCLP.fixedBeta, using the beta-value identified by the FCLP.classicObjective optimization run:

```
# solve the problem using FCLP.fixedBeta
solution <- FCLP.fixedBeta(objective = c,
A = A,
dir = dir,
b = b,
t = t,
beta = 0.24,
maximum=TRUE)
```

`## [1] "Solution is optimal."`

`solution`

```
## beta x1 x2 objective
## [1,] 0.24 1.83 0.38 7.01
```

A benchmark run with beta = 0 returns a optimal objective function value of 8.75. That means, for beta = 0.24 the objective function value is not maximized. This is because FCLP.classicObjective guarantees a certain lower limit and maximizes beta. It does no optimize beta to determine a maximum objective function value.

There are other approaches to conducting optimization for a problem such as the one at hand. In some of my following posts I will provide some additional examples.

Data scientist focusing on simulation, optimization and modeling in R, SQL, VBA and Python

## Leave a Reply