Not too familiar with AMPL, but running into some issues with indexes...

Basically, I have some variables defined as such:

```
var array{i in set};
```

And I need to do some amount of checking the elements around a given `i`

in some of the constraints:

```
subject to Constraint{i in set}:
array[i] + array[i-1] + array[i+1] <= 12;
```

But obviously `array[0]`

or `array[card(set) + 1]`

don't exist. To add a further issue, I'm trying to model a sort of problem in which `array[0]`

or `array[card(set) + 1]`

just shouldn't be factored into our computation at all (e.g. it shouldn't constrain the other variables). Any help appreciated :) Thanks.

# Best How To :

In AMPL, you can create or define your own "sets" for valid indices and use them in your constraints.

So, in your case, to avoid invalid indices, you can define a set of permissible indices: `param inner_i {2..(N-1)}`

and loop over those when creating the constraints.

The price we pay is that we have to explicitly take care of the corner cases.

Here's one way to do it: (Note, I don't have AMPL loaded, so the code is untested.)

```
param N > 0; #number of elements
set ELEM; # Elements
set inner_i {2..(N-1)} > 0; #valid indices
var array {ELEM} >= 0;
subject to LimitSum{i in inner_i}:
array[i-1] + array[i] + array[i+1] <= 12;
#Take care of the boundary conditions explicitly, if needed
subject to LimitSum_start:
array[1] + array[2] <= 12;
#only two elements since array[0] doesn't exist.
subject to LimitSum_last:
array[N-1] + array[N] <= 12;
#only two elements since array[N+1] doesn't exist.
```

Hope this helps you move forward.