-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexamples.go
More file actions
62 lines (55 loc) · 1.36 KB
/
examples.go
File metadata and controls
62 lines (55 loc) · 1.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package problem
import (
getKMatrix "github.com/MatProGo-dev/SymbolicMath.go/get/KMatrix"
getKVector "github.com/MatProGo-dev/SymbolicMath.go/get/KVector"
"github.com/MatProGo-dev/SymbolicMath.go/symbolic"
)
/*
GetExampleProblem3
Description:
Returns the LP from this youtube video:
https://www.youtube.com/watch?v=QAR8zthQypc&t=483s
It should look like this:
Maximize 4 x1 + 3 x2 + 5 x3
Subject to
x1 + 2 x2 + 2 x3 <= 4
3 x1 + 4 x3 <= 6
2 x1 + x2 + 4 x3 <= 8
x1 >= 0
x2 >= 0
x3 >= 0
*/
func GetExampleProblem3() *OptimizationProblem {
// Setup
out := NewProblem("TestProblem3")
// Create variables
x := out.AddVariableVectorClassic(
3,
0.0,
symbolic.Infinity.Constant(),
symbolic.Continuous,
)
// Create Basic Objective
c := getKVector.From([]float64{4.0, 3.0, 5.0})
out.SetObjective(
c.Transpose().Multiply(x),
SenseMaximize,
)
// Create Constraints (using one big matrix)
A := getKMatrix.From([][]float64{
{1.0, 2.0, 2.0},
{3.0, 0.0, 4.0},
{2.0, 1.0, 4.0},
})
b := getKVector.From([]float64{4.0, 6.0, 8.0})
out.Constraints = append(out.Constraints, A.Multiply(x).LessEq(b))
// TODO(kwesi): Figure out how to add non-negativity constraints
// // Add non-negativity constraints
// for _, varII := range x {
// out.Constraints = append(
// out.Constraints,
// varII.GreaterEq(0.0),
// )
// }
return out
}