//This will let you enter numbers only and the decimal point ones.
$(window).load(function(){
$('.number').keypress(function(event) {
if(event.which < 46 || event.which >= 58 || event.which == 47) {
event.preventDefault();
}
if(event.which == 46 && $(this).val().indexOf('.') != -1) {
this.value = '' ;
}
});
});
Переменные в рекордере действительно масштабируются дважды. В драйвере значения масштабируются правильно. Вы можете сравнить его для последнего случая с кодом ниже. Масштабирование выполняется в _apply_voi_meta()
в классе Case
.
#%%
cr = CaseReader('abc.sql')
case_keys = cr.list_cases()
obj=[]
for i, case_key in enumerate(case_keys):
case = cr.get_case(case_key)
derivs = cr.get_case(i).jacobian
# for k in derivs:
# print(k,derivs[k])
recorded_objectives = case.get_objectives()
recorder_constraints = case.get_constraints()
recorder_desvars = case.get_design_vars()
recorder_responses = case.get_responses()
for k in recorder_desvars:
print(k,recorder_desvars[k])
for k in recorder_constraints:
print(k,recorder_constraints[k])
for k in recorded_objectives:
print(k,recorded_objectives[k])
obj.append(recorded_objectives[k])
print('-----------')
print('\nDRIVER:\n\n')
for k, v in iteritems(driver.get_design_var_values()):
print(k, v)
for k, v in iteritems(driver.get_constraint_values()):
print(k, v)
for k, v in iteritems(driver.get_objective_values()):
print(k, v)
Теперь ясно, что источником проблемы является рекордер. В вашем случае вы вызываете и методы get_constraints()
и get_responses()
для случая. В этих методах изменяемые переменные масштабируются. Поэтому, когда вы возвращаете значение, переменная vals
в _apply_voi_meta()
также масштабируется. Сколько раз вы вызываете любую функцию, которая масштабирует одни и те же переменные, переменные будут масштабироваться при каждом вызове функции как побочный эффект.
См. Пример ниже:
#%%
cr = CaseReader('abc.sql')
case_keys = cr.list_cases()
obj=[]
scaled = True
for i, case_key in enumerate(case_keys):
case = cr.get_case(case_key)
derivs = cr.get_case(i).jacobian
# for k in derivs:
# print(k,derivs[k])
recorded_objectives = case.get_objectives(scaled=scaled)
recorder_constraints = case.get_constraints(scaled=scaled)
recorder_desvars = case.get_design_vars()
# recorder_responses = case.get_responses(scaled=scaled)
case.get_constraints(scaled=scaled)
case.get_constraints(scaled=scaled)
for k in recorder_desvars:
print(k,recorder_desvars[k])
for k in recorder_constraints:
print(k,recorder_constraints[k])
for k in recorded_objectives:
print(k,recorded_objectives[k])
obj.append(recorded_objectives[k])
print('-----------')
print('\nDRIVER:\n\n')
for k, v in iteritems(driver.get_design_var_values()):
print(k, v)
for k, v in iteritems(driver.get_constraint_values()):
print(k, v)
for k, v in iteritems(driver.get_objective_values()):
print(k, v)
Если масштабатор равен 10, ограничение будет в 1000 (или 10 ^ 3) раз больше немасштабированного значения, потому что теперь я вызывал метод get_constraints()
3 раза .