Extract data from an output variable - pyomo

I am trying to figure out a post-processing code to extract data from the output of an indexing-variable in PYOMO. The output of the variable is given below.
x : Size=24, Index=x_index
Key : Lower : Value : Upper : Fixed : Stale : Domain
('alum', 'Face 1') : 0 : 0.0 : 1 : False : False : Binary
('alum', 'Face 2') : 0 : 0.0 : 1 : False : False : Binary
('alum', 'Face 3') : 0 : 0.0 : 1 : False : False : Binary
('alum', 'Face 4') : 0 : 0.0 : 1 : False : False : Binary
('alum', 'Face 5') : 0 : 0.0 : 1 : False : False : Binary
('alum', 'Face 6') : 0 : 0.0 : 1 : False : False : Binary
('copper', 'Face 1') : 0 : 1.0 : 1 : False : False : Binary
('copper', 'Face 2') : 0 : 1.1025499604398013e-08 : 1 : False : False : Binary
('copper', 'Face 3') : 0 : 0.7535049595290465 : 1 : False : False : Binary
('copper', 'Face 4') : 0 : 1.0003766762453678e-08 : 1 : False : False : Binary
('copper', 'Face 5') : 0 : 1.0265826814190929e-08 : 1 : False : False : Binary
('copper', 'Face 6') : 0 : 1.0 : 1 : False : False : Binary
('steel', 'Face 1') : 0 : 0.0 : 1 : False : False : Binary
('steel', 'Face 2') : 0 : 0.0 : 1 : False : False : Binary
('steel', 'Face 3') : 0 : 0.0 : 1 : False : False : Binary
('steel', 'Face 4') : 0 : 0.0 : 1 : False : False : Binary
('steel', 'Face 5') : 0 : 0.0 : 1 : False : False : Binary
('steel', 'Face 6') : 0 : 0.0 : 1 : False : False : Binary
('zinc', 'Face 1') : 0 : 1.0461836921235404e-08 : 1 : False : False : Binary
('zinc', 'Face 2') : 0 : 1.0 : 1 : False : False : Binary
('zinc', 'Face 3') : 0 : 0.24649506011873923 : 1 : False : False : Binary
('zinc', 'Face 4') : 0 : 1.0 : 1 : False : False : Binary
('zinc', 'Face 5') : 0 : 1.0 : 1 : False : False : Binary
('zinc', 'Face 6') : 0 : 9.618909950291308e-09 : 1 : False : False : Binary
The expected output is a dictionary as shown below
selected_materials = {'Face 1':'copper',
'Face 2':'zinc',
'Face 3':'copper',
'Face 4':'zinc',
'Face 5':'zinc',
'Face 6':'copper' }
The idea is to choose a material for each face. The selection criteria is the maximum value obtained in the output variable 'x', for each key (combinations of material, face). Eg. For Face 1, the value is compared among 4 materials and the one with highest value is chosen.
My attempt:
I created a code to find the highest value among materials for an individual face as shown below.
max([pyo.value(mdl.x[m, 'Face 1']) for m in materials])
where m is a list as given below (defined in the initial step of the algorithm)
materials = ['steel', 'alum', 'copper', 'zinc']
But finding the material corresponding to the highest value seems challenging. If someone has an idea, kindly help me.
I would appreciate it if you could suggest me some better idea if any.

There are a couple ways to do this. First thing I'd do is pull the values out of the variables into a plain old python data structure, which makes it a bit easier to work with. There are probably a couple variants of the example below that you could implement, depending on how comfortable you are with comprehensions, etc.
import pyomo.environ as pyo
from collections import defaultdict
from operator import itemgetter
matls = ['steel', 'wood']
faces = ['Face 1', 'Face 2']
some_values = { ('steel', 'Face 1') : 1,
('wood', 'Face 1') : 2.2,
('steel', 'Face 2') : 3.5,
('wood', 'Face 2') : 1.1}
# PYOMO MODEL
m = pyo.ConcreteModel()
# Sets
m.M = pyo.Set(initialize=matls)
m.F = pyo.Set(initialize=faces)
# Variables
# Initializing just for the purposes of sorting later....normally NOT needed
m.X = pyo.Var(m.M, m.F, domain=pyo.NonNegativeReals, initialize=some_values)
m.pprint()
# let's pull the values out into a list of tuples.
# this isn't totally necessary, but it is pretty clear, and good staring place
res = [ (face, matl, m.X[matl, face].value) for face in m.F for matl in m.M]
for item in res:
print(item)
# ok... let's gather the results by face and then get the max. (you could also sort the results or whatever...
choices = defaultdict(list)
for face, matl, score in res:
choices[face].append( (matl, score) )
# pick the max
for face in choices:
matl, score = max(choices[face], key=itemgetter(1))
print(f'for face {face} the best material is: {matl} with score {score:.2f}')
Yields:
1 Var Declarations
X : Size=4, Index=X_index
Key : Lower : Value : Upper : Fixed : Stale : Domain
('steel', 'Face 1') : 0 : 1 : None : False : False : NonNegativeReals
('steel', 'Face 2') : 0 : 3.5 : None : False : False : NonNegativeReals
('wood', 'Face 1') : 0 : 2.2 : None : False : False : NonNegativeReals
('wood', 'Face 2') : 0 : 1.1 : None : False : False : NonNegativeReals
4 Declarations: M F X_index X
('Face 1', 'steel', 1)
('Face 1', 'wood', 2.2)
('Face 2', 'steel', 3.5)
('Face 2', 'wood', 1.1)
for face Face 1 the best material is: wood with score 2.20
for face Face 2 the best material is: steel with score 3.50

Related

How To: validate input string is an ip or a domain PHP

Just share a tool and debug. Maybe usefull for someone.
TOOL:
public function ValidateIpOrHostname($inputString)
{
$ValidIpAddressRegex = "/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/";
$ValidHostnameRegex = "/^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$/";
$isValidIp = preg_match($ValidIpAddressRegex , $inputString);
$isValidHost = preg_match($ValidHostnameRegex , $inputString);
return ($isValidIp|| $isValidHost)?1:0;
}
TEST:
EXECUTED :
ValidateIpOrHostname('123.12.12.12') => Result: 1
EXECUTED :
ValidateIpOrHostname('123.123.123.123') => Result: 1
EXECUTED :
ValidateIpOrHostname('1111.1111.1111.1111') => Result: 0
EXECUTED :
ValidateIpOrHostname('234.234.12345.12345') => Result: 0
EXECUTED :
ValidateIpOrHostname('-1.1.1.1') => Result: 0
EXECUTED :
ValidateIpOrHostname('1.1.1.1:80') => Result: 0
EXECUTED :
ValidateIpOrHostname('google.com') => Result: 1
EXECUTED :
ValidateIpOrHostname('www.google.com') => Result: 1
EXECUTED :
ValidateIpOrHostname('http://google.com') => Result: 0
EXECUTED :
ValidateIpOrHostname('http://www.google.com') => Result: 0
EXECUTED :
ValidateIpOrHostname('https://google.com') => Result: 0
EXECUTED :
ValidateIpOrHostname('https://www.google.com') => Result: 0
EXECUTED :
ValidateIpOrHostname('https://google.com') => Result: 0
EXECUTED :
ValidateIpOrHostname('https://google.com:80') => Result: 0
EXECUTED :
ValidateIpOrHostname(''asdjb aosjkdn') => Result: 0
EXECUTED :
ValidateIpOrHostname('asdjb..ewqe.asd..c') => Result: 0
Improves are welcome.
:)

Pyomo, Exiting pyomo solve: Multiple models defined in file:

Working on my first pyomo lp and I am having trouble when I go to load the data. The model appears to be fine but then when it goes to solve it returns that all of my variables are stale and will not give me any values. I have some ideas but wanted to get some more to see if someone else could point out what I am doing wrong. Below is the model
from pyomo.environ import *
import pandas as pd
import numpy as np
from pyomo.core import *
opt = AbstractModel()
opt.PC = Set()
opt.DC = Set()
opt.costs =Param(opt.PC,opt.DC, within = NonNegativeReals)
opt.demands=Param(opt.DC, within = NonNegativeIntegers)
opt.supply= Param(opt.PC, within = NonNegativeIntegers)
opt.cases = Var(opt.PC,opt.DC,domain = NonNegativeIntegers)
def constraint1(opt,DC):
return sum(
opt.cases[i,DC]
for i in opt.PC
) == opt.demands[DC]
opt.constraintdemand = Constraint(opt.DC,rule = constraint1)
def constraint2(opt,PC):
return sum(
opt.cases[PC,j]
for j in opt.DC
) <= opt.supply[PC]
opt.constraintsupply = Constraint(opt.PC,rule = constraint2)
def ObjectiveFunction(opt):
return sum(
opt.costs[i,j] * opt.cases[i,j]
for i in opt.PC
for j in opt.DC
)
opt.Obj=Objective(rule=ObjectiveFunction)
data = DataPortal()
data.load(filename='lp.dat', set = opt.PC)
data.load(filename ='lp.dat', set = opt.DC)
data.load(filename='lp.dat', param = opt.costs)
data.load(filename='lp.dat', param = opt.demands)
data.load(filename='lp.dat', param = opt.supply)
instance = opt.create_instance(data)
instance.pprint()
Here are are the variable declarations:
1 Var Declarations
cases : Size=288, Index=cases_index
Key : Lower : Value : Upper : Fixed : Stale : Domain
(1, 1) : 0 : None : None : False : True : NonNegativeIntegers
(1, 2) : 0 : None : None : False : True : NonNegativeIntegers
(1, 3) : 0 : None : None : False : True : NonNegativeIntegers
(1, 4) : 0 : None : None : False : True : NonNegativeIntegers
(1, 5) : 0 : None : None : False : True : NonNegativeIntegers
(1, 6) : 0 : None : None : False : True : NonNegativeIntegers
(1, 7) : 0 : None : None : False : True : NonNegativeIntegers
(1, 8) : 0 : None : None : False : True : NonNegativeIntegers
(1, 9) : 0 : None : None : False : True : NonNegativeIntegers
(1, 10) : 0 : None : None : False : True : NonNegativeIntegers
(1, 11) : 0 : None : None : False : True : NonNegativeIntegers
(1, 12) : 0 : None : None : False : True : NonNegativeIntegers
(1, 13) : 0 : None : None : False : True : NonNegativeIntegers
(1, 14) : 0 : None : None : False : True : NonNegativeIntegers
(1, 15) : 0 : None : None : False : True : NonNegativeIntegers
(1, 16) : 0 : None : None : False : True : NonNegativeIntegers
(1, 17) : 0 : None : None : False : True : NonNegativeIntegers
(1, 18) : 0 : None : None : False : True : NonNegativeIntegers
(1, 19) : 0 : None : None : False : True : NonNegativeIntegers
(1, 20) : 0 : None : None : False : True : NonNegativeIntegers
(1, 21) : 0 : None : None : False : True : NonNegativeIntegers
(1, 22) : 0 : None : None : False : True : NonNegativeIntegers
(1, 23) : 0 : None : None : False : True : NonNegativeIntegers
(1, 24) : 0 : None : None : False : True : NonNegativeIntegers
(1, 25) : 0 : None : None : False : True : NonNegativeIntegers
(1, 26) : 0 : None : None : False : True : NonNegativeIntegers
(1, 27) : 0 : None : None : False : True : NonNegativeIntegers
(1, 28) : 0 : None : None : False : True : NonNegativeIntegers
(1, 29) : 0 : None : None : False : True : NonNegativeIntegers
(1, 30) : 0 : None : None : False : True : NonNegativeIntegers
(1, 31) : 0 : None : None : False : True : NonNegativeIntegers
(1, 32) : 0 : None : None : False : True : NonNegativeIntegers
(1, 33) : 0 : None : None : False : True : NonNegativeIntegers
(1, 34) : 0 : None : None : False : True : NonNegativeIntegers
(1, 35) : 0 : None : None : False : True : NonNegativeIntegers
(1, 36) : 0 : None : None : False : True : NonNegativeIntegers
(1, 37) : 0 : None : None : False : True : NonNegativeIntegers
(1, 38) : 0 : None : None : False : True : NonNegativeIntegers
(1, 39) : 0 : None : None : False : True : NonNegativeIntegers
(1, 40) : 0 : None : None : False : True : NonNegativeIntegers
(1, 41) : 0 : None : None : False : True : NonNegativeIntegers
(1, 42) : 0 : None : None : False : True : NonNegativeIntegers
(1, 43) : 0 : None : None : False : True : NonNegativeIntegers
(1, 44) : 0 : None : None : False : True : NonNegativeIntegers
(1, 45) : 0 : None : None : False : True : NonNegativeIntegers
(1, 46) : 0 : None : None : False : True : NonNegativeIntegers
(1, 47) : 0 : None : None : False : True : NonNegativeIntegers
(1, 48) : 0 : None : None : False : True : NonNegativeIntegers
(1, 49) : 0 : None : None : False : True : NonNegativeIntegers
(1, 50) : 0 : None : None : False : True : NonNegativeIntegers
(1, 51) : 0 : None : None : False : True : NonNegativeIntegers
(1, 52) : 0 : None : None : False : True : NonNegativeIntegers
(1, 53) : 0 : None : None : False : True : NonNegativeIntegers
(1, 54) : 0 : None : None : False : True : NonNegativeIntegers
(1, 55) : 0 : None : None : False : True : NonNegativeIntegers
(1, 56) : 0 : None : None : False : True : NonNegativeIntegers
(1, 57) : 0 : None : None : False : True : NonNegativeIntegers
(1, 58) : 0 : None : None : False : True : NonNegativeIntegers
(1, 59) : 0 : None : None : False : True : NonNegativeIntegers
(1, 60) : 0 : None : None : False : True : NonNegativeIntegers
(1, 61) : 0 : None : None : False : True : NonNegativeIntegers
(1, 62) : 0 : None : None : False : True : NonNegativeIntegers
(1, 63) : 0 : None : None : False : True : NonNegativeIntegers
(1, 64) : 0 : None : None : False : True : NonNegativeIntegers
(1, 65) : 0 : None : None : False : True : NonNegativeIntegers
(1, 66) : 0 : None : None : False : True : NonNegativeIntegers
(1, 67) : 0 : None : None : False : True : NonNegativeIntegers
(1, 68) : 0 : None : None : False : True : NonNegativeIntegers
(1, 69) : 0 : None : None : False : True : NonNegativeIntegers
(1, 70) : 0 : None : None : False : True : NonNegativeIntegers
(1, 71) : 0 : None : None : False : True : NonNegativeIntegers
(1, 72) : 0 : None : None : False : True : NonNegativeIntegers
(1, 73) : 0 : None : None : False : True : NonNegativeIntegers
(1, 74) : 0 : None : None : False : True : NonNegativeIntegers
(1, 75) : 0 : None : None : False : True : NonNegativeIntegers
(1, 76) : 0 : None : None : False : True : NonNegativeIntegers
(1, 77) : 0 : None : None : False : True : NonNegativeIntegers
(1, 78) : 0 : None : None : False : True : NonNegativeIntegers
(1, 79) : 0 : None : None : False : True : NonNegativeIntegers
(1, 80) : 0 : None : None : False : True : NonNegativeIntegers
(1, 81) : 0 : None : None : False : True : NonNegativeIntegers
(1, 82) : 0 : None : None : False : True : NonNegativeIntegers
(1, 83) : 0 : None : None : False : True : NonNegativeIntegers
(1, 84) : 0 : None : None : False : True : NonNegativeIntegers
(1, 85) : 0 : None : None : False : True : NonNegativeIntegers
(1, 86) : 0 : None : None : False : True : NonNegativeIntegers
(1, 87) : 0 : None : None : False : True : NonNegativeIntegers
(1, 88) : 0 : None : None : False : True : NonNegativeIntegers
(1, 89) : 0 : None : None : False : True : NonNegativeIntegers
(1, 90) : 0 : None : None : False : True : NonNegativeIntegers
(1, 91) : 0 : None : None : False : True : NonNegativeIntegers
(1, 92) : 0 : None : None : False : True : NonNegativeIntegers
(1, 93) : 0 : None : None : False : True : NonNegativeIntegers
(1, 94) : 0 : None : None : False : True : NonNegativeIntegers
(1, 95) : 0 : None : None : False : True : NonNegativeIntegers
(1, 96) : 0 : None : None : False : True : NonNegativeIntegers
(1, 97) : 0 : None : None : False : True : NonNegativeIntegers
(1, 98) : 0 : None : None : False : True : NonNegativeIntegers
(1, 99) : 0 : None : None : False : True : NonNegativeIntegers
(1, 100) : 0 : None : None : False : True : NonNegativeIntegers
(1, 101) : 0 : None : None : False : True : NonNegativeIntegers
(1, 102) : 0 : None : None : False : True : NonNegativeIntegers
(1, 103) : 0 : None : None : False : True : NonNegativeIntegers
(1, 104) : 0 : None : None : False : True : NonNegativeIntegers
(1, 105) : 0 : None : None : False : True : NonNegativeIntegers
(1, 106) : 0 : None : None : False : True : NonNegativeIntegers
(1, 107) : 0 : None : None : False : True : NonNegativeIntegers
(1, 108) : 0 : None : None : False : True : NonNegativeIntegers
(1, 109) : 0 : None : None : False : True : NonNegativeIntegers
(1, 110) : 0 : None : None : False : True : NonNegativeIntegers
(1, 111) : 0 : None : None : False : True : NonNegativeIntegers
(1, 112) : 0 : None : None : False : True : NonNegativeIntegers
(1, 113) : 0 : None : None : False : True : NonNegativeIntegers
(1, 114) : 0 : None : None : False : True : NonNegativeIntegers
(1, 115) : 0 : None : None : False : True : NonNegativeIntegers
(1, 116) : 0 : None : None : False : True : NonNegativeIntegers
(1, 117) : 0 : None : None : False : True : NonNegativeIntegers
(1, 118) : 0 : None : None : False : True : NonNegativeIntegers
(1, 119) : 0 : None : None : False : True : NonNegativeIntegers
(1, 120) : 0 : None : None : False : True : NonNegativeIntegers
(1, 121) : 0 : None : None : False : True : NonNegativeIntegers
(1, 122) : 0 : None : None : False : True : NonNegativeIntegers
(1, 123) : 0 : None : None : False : True : NonNegativeIntegers
(1, 124) : 0 : None : None : False : True : NonNegativeIntegers
(1, 125) : 0 : None : None : False : True : NonNegativeIntegers
(1, 126) : 0 : None : None : False : True : NonNegativeIntegers
(1, 127) : 0 : None : None : False : True : NonNegativeIntegers
(1, 128) : 0 : None : None : False : True : NonNegativeIntegers
(1, 129) : 0 : None : None : False : True : NonNegativeIntegers
(1, 130) : 0 : None : None : False : True : NonNegativeIntegers
(1, 131) : 0 : None : None : False : True : NonNegativeIntegers
(1, 132) : 0 : None : None : False : True : NonNegativeIntegers
(1, 133) : 0 : None : None : False : True : NonNegativeIntegers
(1, 134) : 0 : None : None : False : True : NonNegativeIntegers
(1, 135) : 0 : None : None : False : True : NonNegativeIntegers
(1, 136) : 0 : None : None : False : True : NonNegativeIntegers
(1, 137) : 0 : None : None : False : True : NonNegativeIntegers
(1, 138) : 0 : None : None : False : True : NonNegativeIntegers
(1, 139) : 0 : None : None : False : True : NonNegativeIntegers
(1, 140) : 0 : None : None : False : True : NonNegativeIntegers
(1, 141) : 0 : None : None : False : True : NonNegativeIntegers
(1, 142) : 0 : None : None : False : True : NonNegativeIntegers
(1, 143) : 0 : None : None : False : True : NonNegativeIntegers
(1, 144) : 0 : None : None : False : True : NonNegativeIntegers
(2, 1) : 0 : None : None : False : True : NonNegativeIntegers
(2, 2) : 0 : None : None : False : True : NonNegativeIntegers
(2, 3) : 0 : None : None : False : True : NonNegativeIntegers
(2, 4) : 0 : None : None : False : True : NonNegativeIntegers
(2, 5) : 0 : None : None : False : True : NonNegativeIntegers
(2, 6) : 0 : None : None : False : True : NonNegativeIntegers
(2, 7) : 0 : None : None : False : True : NonNegativeIntegers
(2, 8) : 0 : None : None : False : True : NonNegativeIntegers
(2, 9) : 0 : None : None : False : True : NonNegativeIntegers
(2, 10) : 0 : None : None : False : True : NonNegativeIntegers
(2, 11) : 0 : None : None : False : True : NonNegativeIntegers
(2, 12) : 0 : None : None : False : True : NonNegativeIntegers
(2, 13) : 0 : None : None : False : True : NonNegativeIntegers
(2, 14) : 0 : None : None : False : True : NonNegativeIntegers
(2, 15) : 0 : None : None : False : True : NonNegativeIntegers
(2, 16) : 0 : None : None : False : True : NonNegativeIntegers
(2, 17) : 0 : None : None : False : True : NonNegativeIntegers
(2, 18) : 0 : None : None : False : True : NonNegativeIntegers
(2, 19) : 0 : None : None : False : True : NonNegativeIntegers
(2, 20) : 0 : None : None : False : True : NonNegativeIntegers
(2, 21) : 0 : None : None : False : True : NonNegativeIntegers
(2, 22) : 0 : None : None : False : True : NonNegativeIntegers
(2, 23) : 0 : None : None : False : True : NonNegativeIntegers
(2, 24) : 0 : None : None : False : True : NonNegativeIntegers
(2, 25) : 0 : None : None : False : True : NonNegativeIntegers
(2, 26) : 0 : None : None : False : True : NonNegativeIntegers
(2, 27) : 0 : None : None : False : True : NonNegativeIntegers
(2, 28) : 0 : None : None : False : True : NonNegativeIntegers
(2, 29) : 0 : None : None : False : True : NonNegativeIntegers
(2, 30) : 0 : None : None : False : True : NonNegativeIntegers
(2, 31) : 0 : None : None : False : True : NonNegativeIntegers
(2, 32) : 0 : None : None : False : True : NonNegativeIntegers
(2, 33) : 0 : None : None : False : True : NonNegativeIntegers
(2, 34) : 0 : None : None : False : True : NonNegativeIntegers
(2, 35) : 0 : None : None : False : True : NonNegativeIntegers
(2, 36) : 0 : None : None : False : True : NonNegativeIntegers
(2, 37) : 0 : None : None : False : True : NonNegativeIntegers
(2, 38) : 0 : None : None : False : True : NonNegativeIntegers
(2, 39) : 0 : None : None : False : True : NonNegativeIntegers
(2, 40) : 0 : None : None : False : True : NonNegativeIntegers
(2, 41) : 0 : None : None : False : True : NonNegativeIntegers
(2, 42) : 0 : None : None : False : True : NonNegativeIntegers
(2, 43) : 0 : None : None : False : True : NonNegativeIntegers
(2, 44) : 0 : None : None : False : True : NonNegativeIntegers
(2, 45) : 0 : None : None : False : True : NonNegativeIntegers
(2, 46) : 0 : None : None : False : True : NonNegativeIntegers
(2, 47) : 0 : None : None : False : True : NonNegativeIntegers
(2, 48) : 0 : None : None : False : True : NonNegativeIntegers
(2, 49) : 0 : None : None : False : True : NonNegativeIntegers
(2, 50) : 0 : None : None : False : True : NonNegativeIntegers
(2, 51) : 0 : None : None : False : True : NonNegativeIntegers
(2, 52) : 0 : None : None : False : True : NonNegativeIntegers
(2, 53) : 0 : None : None : False : True : NonNegativeIntegers
(2, 54) : 0 : None : None : False : True : NonNegativeIntegers
(2, 55) : 0 : None : None : False : True : NonNegativeIntegers
(2, 56) : 0 : None : None : False : True : NonNegativeIntegers
(2, 57) : 0 : None : None : False : True : NonNegativeIntegers
(2, 58) : 0 : None : None : False : True : NonNegativeIntegers
(2, 59) : 0 : None : None : False : True : NonNegativeIntegers
(2, 60) : 0 : None : None : False : True : NonNegativeIntegers
(2, 61) : 0 : None : None : False : True : NonNegativeIntegers
(2, 62) : 0 : None : None : False : True : NonNegativeIntegers
(2, 63) : 0 : None : None : False : True : NonNegativeIntegers
(2, 64) : 0 : None : None : False : True : NonNegativeIntegers
(2, 65) : 0 : None : None : False : True : NonNegativeIntegers
(2, 66) : 0 : None : None : False : True : NonNegativeIntegers
(2, 67) : 0 : None : None : False : True : NonNegativeIntegers
(2, 68) : 0 : None : None : False : True : NonNegativeIntegers
(2, 69) : 0 : None : None : False : True : NonNegativeIntegers
(2, 70) : 0 : None : None : False : True : NonNegativeIntegers
(2, 71) : 0 : None : None : False : True : NonNegativeIntegers
(2, 72) : 0 : None : None : False : True : NonNegativeIntegers
(2, 73) : 0 : None : None : False : True : NonNegativeIntegers
(2, 74) : 0 : None : None : False : True : NonNegativeIntegers
(2, 75) : 0 : None : None : False : True : NonNegativeIntegers
(2, 76) : 0 : None : None : False : True : NonNegativeIntegers
(2, 77) : 0 : None : None : False : True : NonNegativeIntegers
(2, 78) : 0 : None : None : False : True : NonNegativeIntegers
(2, 79) : 0 : None : None : False : True : NonNegativeIntegers
(2, 80) : 0 : None : None : False : True : NonNegativeIntegers
(2, 81) : 0 : None : None : False : True : NonNegativeIntegers
(2, 82) : 0 : None : None : False : True : NonNegativeIntegers
(2, 83) : 0 : None : None : False : True : NonNegativeIntegers
(2, 84) : 0 : None : None : False : True : NonNegativeIntegers
(2, 85) : 0 : None : None : False : True : NonNegativeIntegers
(2, 86) : 0 : None : None : False : True : NonNegativeIntegers
(2, 87) : 0 : None : None : False : True : NonNegativeIntegers
(2, 88) : 0 : None : None : False : True : NonNegativeIntegers
(2, 89) : 0 : None : None : False : True : NonNegativeIntegers
(2, 90) : 0 : None : None : False : True : NonNegativeIntegers
(2, 91) : 0 : None : None : False : True : NonNegativeIntegers
(2, 92) : 0 : None : None : False : True : NonNegativeIntegers
(2, 93) : 0 : None : None : False : True : NonNegativeIntegers
(2, 94) : 0 : None : None : False : True : NonNegativeIntegers
(2, 95) : 0 : None : None : False : True : NonNegativeIntegers
(2, 96) : 0 : None : None : False : True : NonNegativeIntegers
(2, 97) : 0 : None : None : False : True : NonNegativeIntegers
(2, 98) : 0 : None : None : False : True : NonNegativeIntegers
(2, 99) : 0 : None : None : False : True : NonNegativeIntegers
(2, 100) : 0 : None : None : False : True : NonNegativeIntegers
(2, 101) : 0 : None : None : False : True : NonNegativeIntegers
(2, 102) : 0 : None : None : False : True : NonNegativeIntegers
(2, 103) : 0 : None : None : False : True : NonNegativeIntegers
(2, 104) : 0 : None : None : False : True : NonNegativeIntegers
(2, 105) : 0 : None : None : False : True : NonNegativeIntegers
(2, 106) : 0 : None : None : False : True : NonNegativeIntegers
(2, 107) : 0 : None : None : False : True : NonNegativeIntegers
(2, 108) : 0 : None : None : False : True : NonNegativeIntegers
(2, 109) : 0 : None : None : False : True : NonNegativeIntegers
(2, 110) : 0 : None : None : False : True : NonNegativeIntegers
(2, 111) : 0 : None : None : False : True : NonNegativeIntegers
(2, 112) : 0 : None : None : False : True : NonNegativeIntegers
(2, 113) : 0 : None : None : False : True : NonNegativeIntegers
(2, 114) : 0 : None : None : False : True : NonNegativeIntegers
(2, 115) : 0 : None : None : False : True : NonNegativeIntegers
(2, 116) : 0 : None : None : False : True : NonNegativeIntegers
(2, 117) : 0 : None : None : False : True : NonNegativeIntegers
(2, 118) : 0 : None : None : False : True : NonNegativeIntegers
(2, 119) : 0 : None : None : False : True : NonNegativeIntegers
(2, 120) : 0 : None : None : False : True : NonNegativeIntegers
(2, 121) : 0 : None : None : False : True : NonNegativeIntegers
(2, 122) : 0 : None : None : False : True : NonNegativeIntegers
(2, 123) : 0 : None : None : False : True : NonNegativeIntegers
(2, 124) : 0 : None : None : False : True : NonNegativeIntegers
(2, 125) : 0 : None : None : False : True : NonNegativeIntegers
(2, 126) : 0 : None : None : False : True : NonNegativeIntegers
(2, 127) : 0 : None : None : False : True : NonNegativeIntegers
(2, 128) : 0 : None : None : False : True : NonNegativeIntegers
(2, 129) : 0 : None : None : False : True : NonNegativeIntegers
(2, 130) : 0 : None : None : False : True : NonNegativeIntegers
(2, 131) : 0 : None : None : False : True : NonNegativeIntegers
(2, 132) : 0 : None : None : False : True : NonNegativeIntegers
(2, 133) : 0 : None : None : False : True : NonNegativeIntegers
(2, 134) : 0 : None : None : False : True : NonNegativeIntegers
(2, 135) : 0 : None : None : False : True : NonNegativeIntegers
(2, 136) : 0 : None : None : False : True : NonNegativeIntegers
(2, 137) : 0 : None : None : False : True : NonNegativeIntegers
(2, 138) : 0 : None : None : False : True : NonNegativeIntegers
(2, 139) : 0 : None : None : False : True : NonNegativeIntegers
(2, 140) : 0 : None : None : False : True : NonNegativeIntegers
(2, 141) : 0 : None : None : False : True : NonNegativeIntegers
(2, 142) : 0 : None : None : False : True : NonNegativeIntegers
(2, 143) : 0 : None : None : False : True : NonNegativeIntegers
(2, 144) : 0 : None : None : False : True : NonNegativeIntegers
The problem is that you were combining two ways of solving Pyomo models that aren't compatible. If you start with an abstract model you can solve it by:
In a Python script use a DataPortal to create a concrete model instance and then solve that model by using the SolverFactory to call a solver
Use the pyomo command and pass in the Python script defining the abstract model and a .dat file with the data to instantiate the model

How to display index based on value?

This is my code example:
budi = {"Name" : "Budi", "Gender" : "Male", "Age" : 18}
ahmad = {"Name" : "Ahmad", "Gender" : "Male", "Age" : 7}
ika = {"Name" : "Ika", "Gender" : "Female", "Age" : 18}
marged = [budi, ahmad, ika]
I want the results like this, for example based on the 18 year old:
The oldest participants are: Budi and Ika
Here is the code according to what have you asked in the question. Please go through this very simple implementation.
from operator import itemgetter
budi = {"Name" : "Budi", "Gender" : "Male", "Age" : 1}
ahmad = {"Name" : "Ahmad", "Gender" : "Male", "Age" : 7}
ika = {"Name" : "Ika", "Gender" : "Female", "Age" : 18}
marged = [budi, ahmad, ika]
newlist = sorted(marged, key=itemgetter('Age'), reverse=True)
maxAge = newlist[0]["Age"]
finalList = [newlist[0]["Name"]]
for person in newlist[1:]:
if person["Age"] == maxAge:
finalList.append(person["Name"])
if len(finalList) == 1:
print "The oldest participant is: " + finalList[0]
else:
print "The oldest participants are: ",
for name in finalList:
print name+" ",

JMeter : Regex extracting from an array response

I want to extract the addressId for a given housenumber in a response with a long array. The array response looks like this (snippet):
: : "footprint":null,
: : "type":null,
: : "addressId":"0011442239",
: : "streetName":"solitudestr.",
: : "streetNrFirstSuffix":null,
: : "streetNrFirst":null,
: : "streetNrLastSuffix":null,
: : "streetNrLast":null,
: : "houseNumber":"25",
: : "houseName":null,
: : "city":"stuttgart",
: : "postcode":"70499",
: : "stateOrProvince":null,
: : "countryName":null,
: : "poBoxNr":null,
: : "poBoxType":null,
: : "attention":null,
: : "geographicAreas":
: : [
: : ],
: : "firstName":null,
: : "lastName":null,
: : "title":null,
: : "region":"BW",
: : "additionalInfo":null,
: : "properties":
: : [
: : ],
: : "extAddressId":null,
: : "entrance":null,
: : "district":null,
: : "addressLine1":null,
: : "addressLine2":null,
: : "addressLine3":null,
: : "addressLine4":null,
: : "companyName":null,
: : "contactName":null,
: : "houseNrExt":null,
: : "derbyStack":false
: },
: {
: : "footprint":null,
: : "type":null,
: : "addressId":"0011442246",
: : "streetName":"solitudestr.",
: : "streetNrFirstSuffix":null,
: : "streetNrFirst":null,
: : "streetNrLastSuffix":null,
: : "streetNrLast":null,
: : "houseNumber":"26",
: : "houseName":null,
: : "city":"stuttgart",
: : "postcode":"70499",
: : "stateOrProvince":null,
: : "countryName":null,
: : "poBoxNr":null,
: : "poBoxType":null,
: : "attention":null,
: : "geographicAreas":
: : [
: : ],
: : "firstName":null,
: : "lastName":null,
: : "title":null,
: : "region":"BW",
: : "additionalInfo":null,
: : "properties":
: : [
: : ],
: : "extAddressId":null,
: : "entrance":null,
: : "district":null,
: : "addressLine1":null,
: : "addressLine2":null,
: : "addressLine3":null,
: : "addressLine4":null,
: : "companyName":null,
: : "contactName":null,
: : "houseNrExt":null,
: : "derbyStack":false
: },
i only show 2 housenumbers in this response as an example but the original response is bigger.
Q: How can i match the adressId for a specific houseNumber (i have these houseNumbers in my CSV dataset) ? I Could do a regex which extracts all addressId's but then i'd have to use the correct matching no. in Jmeter. However, i cannot assume that the ordening of these will remain same in the different environments we test the script against.
I would recommend reconsidering using regular expressions to deal with JSON data.
Starting from JMeter 3.0 you have a JSON Path PostProcessor. Using it you can execute arbitrary JSONPath queries so extracting the addressID for the given houseNumber would be as simple as:
`$..[?(#.houseNumber == '25')].addressId`
Demo:
You can use a JMeter Variable instead of the hard-coded 25 value like:
$..[?(#.houseNumber == '${houseNumber}')].addressId
If for some reason you have to use JMeter < 3.0 you still can have JSON Path postprocessing capabilities using JSON Path Extractor via JMeter Plugins
See Advanced Usage of the JSON Path Extractor in JMeter article, in particular Conditional Select chapter for more information.
You may use a regex that will capture the digits after addressId and before a specific houseNumber if you use an unrolled tempered greedy token (for better efficiency) in between them to make sure the regex engine does not overflow to another record.
"addressId":"(\d+)"(?:[^\n"]*(?:\n(?!: +: +\[)[^\n"]*|"(?!houseNumber")[^\n"]*)*"houseNumber":"25"|$)
See the regex demo (replace 25 with the necessary house number)
Details:
"addressId":" - literal string
(\d+) - Group 1 ($1$ template value) capturing 1+ digits
" - a quote
(?:[^\n"]*(?:\n(?!: +: +\[)[^\n"]*|"(?!houseNumber")[^\n"]*)*"houseNumber":"25"|$) - a non-capturing group with 2 alternatives, one being $ (end of string) or:
[^\n"]* - zero or more chars other than newline and "
(?: - then come 2 alternatives:
\n(?!: +: +\[)[^\n"]* - a newline not followed with : : [ like string and followed with 0+chars other than a newline and "
| - or
"(?!houseNumber")[^\n"]* - a " not followed with houseNumber and followed with 0+chars other than a newline and "
)* - than may repeat 0 or more times
"houseNumber":"25" - hourse number literal string.

Mongodb Index usage slower with regex anchor

I've got a query that's using a regex anchor and it seems to be slower when running an index scan rather than a collection scan.
A bit of background to the question:
I have a MSSQL database that has approximately 2.8 million rows in a table. We were running the following query against the table to return approximately 2.6 million results in 23 seconds:
select * from table where 'column' like "IL%"
So out of curiosity I decided to see if mongodb could perform this any faster than my MSSQL database and on a new test server I created a mongodb database which I filled 1 collection (test1) with just under 3 million objects. Here's the basic structure of a document in a collection:
> db.test1.findOne()
{
"_id" : 2,
"Other_REV" : "NULL",
"Holidex_Code" : "W8BP0",
"Segment_Name" : "NULL",
"Source" : "Forecast",
"Date_" : ISODate("2009-11-12T11:14:00Z"),
"Rooms_Sold" : 3,
"FB_REV" : "NULL",
"Rate_Code" : "ILM87",
"Export_Date" : ISODate("2010-12-12T11:14:00Z"),
"Rooms_Rev" : 51
}
All of my records have Rate_Code prefixed with IL and I ran the following query against the database which took just over 3 seconds:
> db.test1.find({'Rate_Code':{$regex: /^IL/}}).explain()
{
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 2999999,
"nscannedObjects" : 2999999,
"nscanned" : 2999999,
"nscannedObjectsAllPlans" : 2999999,
"nscannedAllPlans" : 2999999,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 4,
"nChunkSkips" : 0,
"millis" : 3398,
"indexBounds" : {
},
"server" : "MONGODB:27017"
}
Out of curiosity I created an index to see if I could speed up the retrieval at all:
> db.test1.ensureIndex({'Rate_Code':1})
However this appears to actually slow down the resolution of the query to approximately 6 seconds on average:
> db.test1.find({'Rate_Code':{$regex: /^IL/}}).explain()
{
"cursor" : "BtreeCursor Rate_Code_1",
"isMultiKey" : false,
"n" : 2999999,
"nscannedObjects" : 2999999,
"nscanned" : 2999999,
"nscannedObjectsAllPlans" : 2999999,
"nscannedAllPlans" : 2999999,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 4,
"nChunkSkips" : 0,
"millis" : 5895,
"indexBounds" : {
"Rate_Code" : [
[
"IL",
"IM"
]
]
},
"server" : "MONGODB:27017"
}
The OS has 2GB of memory and appears to be holding both indexes quite comfortably in memory with no disk usage being recorded when the query is ran:
> db.test1.stats()
{
"ns" : "purify.test1",
"count" : 2999999,
"size" : 623999808,
"avgObjSize" : 208.0000053333351,
"storageSize" : 790593536,
"numExtents" : 18,
"nindexes" : 2,
"lastExtentSize" : 207732736,
"paddingFactor" : 1,
"systemFlags" : 0,
"userFlags" : 0,
"totalIndexSize" : 153218240,
"indexSizes" : {
"_id_" : 83722240,
"Rate_Code_1" : 69496000
},
"ok" : 1
}
I'm thinking the slow down is due to mongodb performing a full scan of the index followed by a full collection scan as it can't be sure that all my matches are in the index but I'm not entirely sure if this is the case. Is there any way that this could be improved upon for better performance?
Thanks for any help.