Переменные в рекордере действительно масштабируются дважды. В драйвере значения масштабируются правильно. Вы можете сравнить его для последнего случая с кодом ниже. Масштабирование выполняется в _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 раза .
Во-первых, вам нужно добавить настраиваемое пространство имен XML, которое будет спроектировать пространство имен, в котором определены параметры:
xmlns:properties="clr-namespace:TestSettings.Properties"
Затем в вашем файле XAML перейдите к экземпляру настроек по умолчанию, используя следующий синтаксис :
{x:Static properties:Settings.Default}
Итак, вот окончательный код результата:
<ListBox x:Name="lb"
ItemsSource="{Binding Source={x:Static properties:Settings.Default},
Path=Names}" />
Источник: WPF - Как привязать элемент управления к свойству, определенному в Настройках?
Примечание. Как указано @Daniel и @nabulke, не забудьте установить Модификатор доступа вашего файла настроек на Public
и Scope на User
Приведенное выше решение действительно работает, но я считаю его довольно подробным ... вместо этого вы можете использовать собственное расширение разметки, которое можно использовать следующим образом:
<ListBox x:Name="lb" ItemsSource="{my:SettingBinding Names}" />
Вот код для этого extension:
public class SettingBindingExtension : Binding
{
public SettingBindingExtension()
{
Initialize();
}
public SettingBindingExtension(string path)
:base(path)
{
Initialize();
}
private void Initialize()
{
this.Source = WpfApplication1.Properties.Settings.Default;
this.Mode = BindingMode.TwoWay;
}
}
Подробнее здесь: http://www.thomaslevesque.com/2008/11/18/wpf-binding-to-application-settings-using-a-markup-extension/