fdu.xiaojf@gmai... fdu.xiaojf@gmai...
Mon Jul 16 08:02:15 CDT 2007

```dmitrey wrote:
> fdu.xiaojf@gmail.com wrote:
>> There are two problems:
>>
>> 1) In the constrain functions, I expected the value of i to be bounded
>> to the specific constrain function, but it doesn't work as I expected.
>>
>> Here is a demonstration:
>> In [14]: a = []
>>
>> In [15]: for i in range(4):
>>      b = lambda : i**2
>>      a.append(b)
>>     ....:
>>     ....:
>>
>> In [18]: for f in a:
>>      print f()
>>     ....:
>>     ....:
>> 9
>> 9
>> 9
>> 9
>>
>> What I want is that every function in list a should print different
>> values. The value of a[0](), a[1](), a[2](), a[3]() should be 0, 1, 4,
>> 9.
>>
>> How to achieve this?
>>
> if your b[i] are funcs from x, you should use b = lambda x: x **2 (for
> example)
> however, NLP solvers can't handle these constraints as lb-ub bounds
> (fixed float numbers are required), you should describe them as
> non-linear constraints
> c[i](x)<=0
> HTH, D.

Yes, b[i] are functions from X, and X is a list.

I want to constrain every xi in X to be larger than 0, so I tried to create
the constrain function like this:

cons = []
for i in range(N): # N is the length of X, or the number of variables
f = lambda x: x[i] - 1e-10
cons.append(f)

But it didn't work as expected :(

According to the demands of fmin_cobyla, the parameter of cons should be a
list of functions that all must be >=0.

Regards

```