Help needed Modulenotefounderror; No module name cplex

Im working on my Mac and I just fixed the script. Then I wanted to make an edit and no nothing seem to work anymore.

I get the error message; Traceback (most recent call last): File “lu.py”, line 1, in import cplex ModuleNotFoundError: No module named ‘cplex’

import cplex
import csv

members =
obj_vars =
verbose = False

column_numbers = {
‘member_name’: 0,
‘not_possible_days’: 6,
‘preferred_people’: 2,
‘gender’: 4,
‘preferred_days’ : 3,
}

no_of_groups = 5

min_members = 10
max_members = 20
min_guys_per_group = 2

verenigingen = [
[‘Aug’, 0, 4, 0, 3, 0],
[‘Quint’, 1, 3, 4, 0, 0],
[‘Catena’, 3, 1, 2, 1, 1]

]

with open(‘lu.csv’, ‘r’) as lu_file:
csv_reader = csv.reader(lu_file, delimiter=’;’)
for row in csv_reader:
name = row[column_numbers[‘member_name’]].replace(" ", “_”).lower()

    member = [name, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]
    if row[column_numbers['not_possible_days']] != 'None (I am pretty flexible !!)':
        if "Monday" in row[column_numbers['not_possible_days']]:
            member[1] = 0
        if "Tuesday" in row[column_numbers['not_possible_days']]:
            member[2] = 0
        if "Wednesday" in row[column_numbers['not_possible_days']]:
            member[3] = 0
        if "Thursday" in row[column_numbers['not_possible_days']]:
            member[4] = 0
        if "Friday" in row[column_numbers['not_possible_days']]:
            member[5] = 0
    if 'Monday' in row[column_numbers['preferred_days']]:
        member[6] = 1
    if 'Tuesday' in row[column_numbers['preferred_days']]:
        member[7] = 1
    if 'Wednesday' in row[column_numbers['preferred_days']]:
        member[8] = 1
    if 'Thursday' in row[column_numbers['preferred_days']]:
        member[9] = 1
    if 'Friday' in row[column_numbers['preferred_days']]:
        member[10] = 1
    member.append(row[column_numbers['preferred_people']])
    if row[column_numbers['gender']] == 'Male':
        member.append(1)
    else:
        member.append(0)
    members.append(member)

Get people together

for member in members:
preferred_friends_str = member[11]
preferred_friends_correct =

if preferred_friends_str:
    preferred_friends = preferred_friends_str.split(',')

    for preferred_friend in preferred_friends:
        proper_name = preferred_friend.strip().lower().replace(' ', '_')
        proper_friend = []

        for other_member in members:
            if proper_name in other_member[0]:
                proper_friend.append(other_member[0])

        if len(proper_friend) == 0:
            print(f"Could not find {proper_name} for {member[0]}")
        else:
            if len(proper_friend) > 1:
                print(f"Found {proper_friend} for {member[0]}, requested for {proper_name}, choosing {proper_friend[0]}")
            preferred_friends_correct.append(proper_friend[0])

member[11] = preferred_friends_correct

print("")

if verbose:
for member in members:
print(member)

print("")

Create an instance of a linear problem to solve

problem = cplex.Cplex()

We want to find a maximum of our objective function

problem.objective.set_sense(problem.objective.sense.maximize)

constraints =
rhs =
var_names =
cns_type =

Define membership constraint:

group_cns = [ for _ in range(no_of_groups)]
groups_coef = [[1] * len(members) for _ in range(no_of_groups)]

for member in members:
member_cns_vars =
member_cns_coef = [1] * no_of_groups

for group in range(no_of_groups):
    cns_var = f'{member[0]}_{group}'

    var_names.append(cns_var)
    member_cns_vars.append(cns_var)
    group_cns[group].append(cns_var)

# Add all group constraints for every member
constraints.append([member_cns_vars, member_cns_coef])
rhs.append(1)
cns_type.append("E")

Add all member constraints for every group

for cns, coef in zip(group_cns, groups_coef):
constraints.append([cns, coef])
rhs.append(min_members)
cns_type.append(“G”)

constraints.append([cns, coef])
rhs.append(max_members)
cns_type.append("L")

All groups have at least 2 days they all can

for group in range(no_of_groups):
group_days_vars =
group_days_coef = [1]*7

for day in range(5):
    cns_var = f'group{group}_D{day}'

    var_names.append(cns_var)
    group_days_vars.append(cns_var)

constraints.append([group_days_vars, group_days_coef])
rhs.append(2)
cns_type.append('E')

Constrain people to groups

for member in members:
for group in range(no_of_groups):
cns_vars = [f’group{group}D{day}’ for day in range(5)] + [f’{member[0]}{group}’]
cns_coef = member[1:6] + [-1000]

    constraints.append([cns_vars, cns_coef])
    rhs.append(-(1000-2))
    cns_type.append('G')

All Groups go to all Verenigingen once

for group in range(no_of_groups):
for vereniging in verenigingen:
cns_vars =
cns_coef = [1] * 5
for day in range(5):
cns_var = f’group{group}D{day}{vereniging[0]}’
var_names.append(cns_var)
cns_vars.append(cns_var)

        # Only group to vereniging on day X if group can on day X
        constraints.append([[f'group{group}_D{day}', cns_var], [1, -1]])
        rhs.append(0)
        cns_type.append('G')


    constraints.append([cns_vars, cns_coef])
    rhs.append(1)
    cns_type.append('E')

Verenigingen have limited capacity

for vereniging in verenigingen:
for day in range(5):
cns_vars = [f’group{group}D{day}{vereniging[0]}’ for group in range(no_of_groups)]
cns_coef = [1] * no_of_groups

    constraints.append([cns_vars, cns_coef])
    rhs.append(vereniging[day+1])
    cns_type.append('L')

Set value of Member_NDX if of interest

Member_G0 + G0_D0 - Member_ND0 <= 1

for member in members:
for prefered_day, preferred in enumerate(member[6:11]):
if not preferred:
pref_var = f’{member[0]}ND{prefered_day}’
var_names.append(pref_var)
for group in range(no_of_groups):
cns_vars = [f’{member[0]}
{group}’, f’group{group}_D{prefered_day}’, pref_var]
cns_coef = [1, 1, -1]

            constraints.append([cns_vars, cns_coef])
            rhs.append(1)
            cns_type.append('L')

Make people preferred together

Member_G0 + Preferred_Friend_G0 - 2 Member_G0_Preferred_Friend_G0 >= 0

for member in members:
if member[11]:
for preferred_friend in member[11]:
for group in range(no_of_groups):
cns_vars = [f’{member[0]}{group}’, f’{preferred_friend}{group}’, f’{member[0]}{group}{preferred_friend}{group}’]
cns_coef = [1, 1, -2]
var_names.append(f’{member[0]}
{group}{preferred_friend}{group}’)
obj_vars.append(f’{member[0]}{group}{preferred_friend}_{group}’)

            constraints.append([cns_vars, cns_coef])
            rhs.append(0)
            cns_type.append('G')

Ensure at least min_guys_per_group

for group in range(no_of_groups):
cns_vars =
cns_coef =
for member in members:
cns_vars.append(f’{member[0]}_{group}’)
cns_coef.append(member[12])

constraints.append([cns_vars, cns_coef])
rhs.append(min_guys_per_group)
cns_type.append('G')

if verbose:
for i in range(len(constraints)):
print(constraints[i], cns_type[i], rhs[i])
print("")

obj =

Generate obj

for var_name in var_names:
if “_ND” in var_name:
obj.append(-10)
elif var_name in obj_vars:
obj.append(50)
else:
obj.append(0)

low = [0] * len(var_names)
upp = [1] * len(var_names)

problem.variables.add(obj=obj,
lb=low,
ub=upp,
names=var_names,
types=problem.variables.type.integer * len(obj))

problem.linear_constraints.add(lin_expr=constraints,
senses=cns_type,
rhs=rhs)

problem.solve()
solution = [round(i) for i in problem.solution.get_values()]
solution_space = {}

for i, j in zip(solution, var_names):
if verbose:
print(i, j)
solution_space[j] = i

groups = [ for _ in range(no_of_groups)]
start = 0
for i, member in enumerate(members):
for j in range(no_of_groups):
if solution[start + j]:
extra_str = “”
if sum(member[1:6]) == 5:
extra_str = “*”
groups[j].append(member[0] + extra_str)
break
start += no_of_groups

for i, group in enumerate(groups):
print(f"Group {i+1}:")
for key, value in solution_space.items():
if f’group{i}’ in key and value:
if key[-2:] == ‘D0’:
print(“Monday”)
if key[-2:] == ‘D1’:
print(“Tuesday”)
if key[-2:] == ‘D2’:
print(“Wednesday”)
if key[-2:] == ‘D3’:
print(“Thursday”)
if key[-2:] == ‘D4’:
print(“Friday”)
print("==========")
for member in group:
print(member)
print("")

I did not made the script and my knowledge about python is not much

When I want to start the script I use terminal – cd (file location) pyzton3 lu.py

Anyone who can help me with this problem?

Hi Anna Lisa, and welcome.

Thanks for posting your script, but since the error is on literally the
very first line, almost all of it is irrelevant. The problem is here:

import cplex

and the error is that Python can’t find the module “cplex”. So the fault
is easy to diagnose, but perhaps tricky to solve.

Some questions:

  1. Are you sure that the module name is spelled correctly?

  2. Do you have the cplex module installed?

  3. Was that line ever working?

  4. If it never worked, then either the cplex module is not installed,
    or it is installed somewhere Python can’t see it.

  5. If it was working, but isn’t now, what changed in the meantime?

Are you comfortable running commands in the terminal app? If so, you
could try these and post the results here, they may help diagnose the
problem:

find ~ -name cplex.py -print

python3 -c "import sys; print(sys.path)"

(The first command searches your home directory for a file called
“cplex.py”, the second asks Python to print out the places it looks for
modules.)