# Getindex in Model Constraints assign

**URL:** https://discourse.julialang.org/t/getindex-in-model-constraints-assign/54678
**Category:** Optimization (Mathematical)
**Tags:** jump
**Created:** [February 5, 2021, 10:41am UTC](https://discourse.julialang.org/t/getindex-in-model-constraints-assign/54678 "2021-02-05T10:41:38Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![user1200](https://avatars.discourse-cdn.com/v4/letter/u/b2d939/32.png) [@user1200](https://discourse.julialang.org/u/user1200)
#### Post date: [February 5, 2021, 10:41am UTC](https://discourse.julialang.org/t/getindex-in-model-constraints-assign/54678/1 "2021-02-05T10:41:38Z")

</div>

Hello

Is there a way to use getIndex or findfirst function in Constraints in Model?  
Usage: Get maximum value from “1 vector(column)”-but remember just its index, for example 8th.  
Then get value from “another vector(column)” at specific index (8th)?

pseudocode  
`vector2[getindex(max(vector1), vector1)]`

in model:

```julia
data = rand(14,10)
model = Model() #model = Model(Ipopt.Optimizer)

@variable(model, x1)
@variable(model, maxi)
@variable(model, inde) #@variable(model, inde,Int)

@constraints(model, begin
        [i=1:14], data[i,1] * x1 <=maxi
end)

@constraints(model, begin
# inde==findfirst(maxi, data[1:14,1])
        inde==getindex(maxi, data[1:14,1])
end)

@objective(model, Max, data[inde,2] ) #goal

```

_or custom function for model is needed to create?_

---

<div class="post-metadata">

### Author: ![Wikunia](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/wikunia/32/2180_2.png) [@Wikunia](https://discourse.julialang.org/u/Wikunia)
#### Post date: [February 5, 2021, 11:00am UTC](https://discourse.julialang.org/t/getindex-in-model-constraints-assign/54678/2 "2021-02-05T11:00:42Z")

</div>

In general you can’t index with a variable as the variable is continuous.

---

<div class="post-metadata">

### Author: ![user1200](https://avatars.discourse-cdn.com/v4/letter/u/b2d939/32.png) [@user1200](https://discourse.julialang.org/u/user1200)
#### Post date: [February 5, 2021, 1:06pm UTC](https://discourse.julialang.org/t/getindex-in-model-constraints-assign/54678/3 "2021-02-05T13:06:16Z")

</div>

i tried  
(code is working without errors, but optimum wasnt found 😁)

```julia
using Random
using JuMP
import Ipopt
Random.seed!(1200)		

data = rand(6)	
data2 = rand(6)	

data[2]=40.1
data2[2]=123.12

model = Model(Ipopt.Optimizer)

@variable(model, x1)

f(x...) = data2[findfirst(x .== max(x...) )	]
register(model, :f, 6, f; autodiff = true)

@NLexpression(model, y[i = 1:6],data[i]*x1	)

@NLobjective(model, Max, f(y...) )

optimize!(model)
value(x1)
data2
data

```

solution is optimal…x1=0

but, for x=1, objective value is 123.12 (higher)  
(2nd element in data is max…also 2nd element in data2 (objective) is max

6-element Array{Float64,1}:  
0.6090858757801794  
**40.1**  
0.7418153587583025  
0.1461819584127848  
0.22809478234081726  
0.7570257298492764

julia\> data2  
6-element Array{Float64,1}:  
0.8393052531712282  
**123.12**  
0.05918180470419587  
0.05660165930690897  
0.3355748112808865  
0.8392086371374328

---

<div class="post-metadata">

### Author: ![odow](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/odow/32/28685_2.png) [@odow](https://discourse.julialang.org/u/odow)
#### Post date: [February 5, 2021, 9:20pm UTC](https://discourse.julialang.org/t/getindex-in-model-constraints-assign/54678/4 "2021-02-05T21:20:16Z")

</div>

You need to use a mixed-integer linear program:

```nohighlight
using JuMP, Cbc
data = rand(14, 2)
model = Model(Cbc.Optimizer)
@variables(model, begin
    maxi
    z[1:14], Bin
end)
@constraints(model, begin
    [i=1:14], data[i, 1] <= maxi
    maxi == sum(data[i, 1] * z[i] for i = 1:14)
    sum(z) == 1
end)
@objective(model, Max, sum(data[i, 2] * z[i] for i = 1:14)

```

Here are some tricks: [9 Mixed integer optimization — MOSEK Modeling Cookbook 3.3.0](https://docs.mosek.com/modeling-cookbook/mio.html)
