Является ли & ldquo; scaler & rdquo; умножить в два раза?

//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 = '' ;
  }  
});
});
0
задан user2375049 26 February 2019 в 16:09
поделиться

1 ответ

Переменные в рекордере действительно масштабируются дважды. В драйвере значения масштабируются правильно. Вы можете сравнить его для последнего случая с кодом ниже. Масштабирование выполняется в _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 раза .

0
ответ дан onodip 26 February 2019 в 16:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: