From 9d00654932838e18ee6306f47604d6ab6a8ff035 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Sun, 19 Jun 2016 19:52:41 +0000 Subject: [PATCH] [RBM] - removed classes HiddenLayer.hpp and VisibleLayer.hpp - fixed warnings - RbmComponent inherits Rbm - improved Rbm::train - use gaussion weight initialization git-svn-id: http://moon:8086/svn/software/trunk/projects/RBM@297 b431acfa-c32f-4a4a-93f1-934dc6c82436 --- Source/HiddenLayer.hpp | 37 ----- Source/LayerArray.hpp | 2 +- Source/MainComponent.cpp | 330 +++++++++++++++++++-------------------- Source/MainComponent.h | 6 +- Source/Rbm.hpp | 205 +++++++++++++----------- Source/RbmComponent.cpp | 116 ++------------ Source/RbmComponent.h | 65 ++------ Source/VisibleLayer.hpp | 37 ----- Source/Weights.hpp | 9 +- 9 files changed, 303 insertions(+), 504 deletions(-) delete mode 100644 Source/HiddenLayer.hpp delete mode 100644 Source/VisibleLayer.hpp diff --git a/Source/HiddenLayer.hpp b/Source/HiddenLayer.hpp deleted file mode 100644 index 7dc6c4b..0000000 --- a/Source/HiddenLayer.hpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - * HiddenLayer.hpp - * - * Created on: 21.09.2014 - * Author: jens - */ - -#ifndef HIDDENLAYER_HPP_ -#define HIDDENLAYER_HPP_ - -#include "Layer.hpp" -#include - -class HiddenLayer : public Layer -{ -public: - HiddenLayer(uint32_t numUnits = 0, const RowVectorXd *pStatesInit = nullptr) - : Layer(numUnits, pStatesInit) - { - } - - virtual ~HiddenLayer() - { - } - -private: - double accum(Layer &layer, Weights &weights, uint32_t index) - { - double sum = ((Weights&)weights).hiddenBias()[index]; - - sum += layer.states() * ((Weights&)weights).weights().col(index); - - return sum; - } -}; - -#endif /* HIDDENLAYER_HPP_ */ diff --git a/Source/LayerArray.hpp b/Source/LayerArray.hpp index 35716dd..41d84a1 100644 --- a/Source/LayerArray.hpp +++ b/Source/LayerArray.hpp @@ -138,7 +138,7 @@ public: { float v; - for (j=0; j < data.size(); j++) + for (j=0; j < data.cols(); j++) { fscanf(pFile, "%f", &v); data(j) = v; diff --git a/Source/MainComponent.cpp b/Source/MainComponent.cpp index d8d8b07..ed24af8 100644 --- a/Source/MainComponent.cpp +++ b/Source/MainComponent.cpp @@ -51,20 +51,18 @@ MainComponent::MainComponent () addButton->addListener (this); addAndMakeVisible (patterSlider = new Slider ("Pattern slider")); + patterSlider->setTooltip (TRANS("Training index")); patterSlider->setRange (0, 0, 1); patterSlider->setSliderStyle (Slider::LinearBar); patterSlider->setTextBoxStyle (Slider::TextBoxLeft, false, 80, 20); patterSlider->addListener (this); - addAndMakeVisible (reconstructButton = new TextButton ("Reconstruct button")); - reconstructButton->setButtonText (TRANS("Reconstruct")); - reconstructButton->addListener (this); - addAndMakeVisible (ShakeButton = new TextButton ("Shake button")); ShakeButton->setButtonText (TRANS("Shake")); ShakeButton->addListener (this); addAndMakeVisible (WeightsSlider = new Slider ("Weights slider")); + WeightsSlider->setTooltip (TRANS("Weight index")); WeightsSlider->setRange (0, 0, 1); WeightsSlider->setSliderStyle (Slider::LinearBar); WeightsSlider->setTextBoxStyle (Slider::TextBoxLeft, false, 80, 20); @@ -88,12 +86,9 @@ MainComponent::MainComponent () learningRateLabel->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); learningRateLabel->addListener (this); - addAndMakeVisible (testButton = new TextButton ("Test button")); - testButton->setButtonText (TRANS("Test")); - testButton->addListener (this); - addAndMakeVisible (numVisibleLabel = new Label ("Num Visible label", TRANS("16"))); + numVisibleLabel->setTooltip (TRANS("Number of visible units X")); numVisibleLabel->setFont (Font (15.00f, Font::plain)); numVisibleLabel->setJustificationType (Justification::centred); numVisibleLabel->setEditable (true, true, false); @@ -103,6 +98,7 @@ MainComponent::MainComponent () addAndMakeVisible (numHiddenLabel = new Label ("Num Hidden label", TRANS("64"))); + numHiddenLabel->setTooltip (TRANS("Number of hidden units")); numHiddenLabel->setFont (Font (15.00f, Font::plain)); numHiddenLabel->setJustificationType (Justification::centred); numHiddenLabel->setEditable (true, true, false); @@ -133,6 +129,7 @@ MainComponent::MainComponent () addAndMakeVisible (numVisibleYLabel = new Label ("Num Visible Y label", TRANS("16"))); + numVisibleYLabel->setTooltip (TRANS("Number of visible units Y")); numVisibleYLabel->setFont (Font (15.00f, Font::plain)); numVisibleYLabel->setJustificationType (Justification::centred); numVisibleYLabel->setEditable (true, true, false); @@ -157,22 +154,21 @@ MainComponent::MainComponent () removeTrainingButton->addListener (this); addAndMakeVisible (numGibbsSlider = new Slider ("Num. Gibbs slider")); + numGibbsSlider->setTooltip (TRANS("Number of gibbs samples")); numGibbsSlider->setRange (1, 101, 1); numGibbsSlider->setSliderStyle (Slider::LinearBar); numGibbsSlider->setTextBoxStyle (Slider::TextBoxLeft, false, 80, 20); numGibbsSlider->addListener (this); - addAndMakeVisible (reconstructEquButton = new TextButton ("Reconstruct Equilibrium button")); - reconstructEquButton->setButtonText (TRANS("Reconst Equ.")); - reconstructEquButton->addListener (this); - addAndMakeVisible (rbmDoRaoBlackwellToggleButton = new ToggleButton ("rbmDoRaoBlackwell toggle button")); + rbmDoRaoBlackwellToggleButton->setTooltip (TRANS("Don\'t sample hidden during learning")); rbmDoRaoBlackwellToggleButton->setButtonText (TRANS("Rao-Blackwell")); rbmDoRaoBlackwellToggleButton->addListener (this); - addAndMakeVisible (rbmReduceVarianceToggleButton = new ToggleButton ("rbmReduceVariance toggle button")); - rbmReduceVarianceToggleButton->setButtonText (TRANS("Reduce Variance")); - rbmReduceVarianceToggleButton->addListener (this); + addAndMakeVisible (rbmDoSampleVisibleToggleButton = new ToggleButton ("rbmDoSampleVisible toggle button")); + rbmDoSampleVisibleToggleButton->setTooltip (TRANS("Sample visible during learning\n")); + rbmDoSampleVisibleToggleButton->setButtonText (TRANS("Sample Visible")); + rbmDoSampleVisibleToggleButton->addListener (this); addAndMakeVisible (lambdaLabel = new Label ("Lambda label", TRANS("1.0"))); @@ -219,7 +215,7 @@ MainComponent::MainComponent () sigmaDecayLabel->addListener (this); addAndMakeVisible (weightDecayLabel = new Label ("WeightDecay label", - TRANS("0.0"))); + TRANS("0"))); weightDecayLabel->setFont (Font (15.00f, Font::plain)); weightDecayLabel->setJustificationType (Justification::centred); weightDecayLabel->setEditable (true, true, false); @@ -228,6 +224,7 @@ MainComponent::MainComponent () weightDecayLabel->addListener (this); addAndMakeVisible (m_progressBarSlider = new Slider ("progressBar slider")); + m_progressBarSlider->setTooltip (TRANS("Progress")); m_progressBarSlider->setRange (0, 100, 1); m_progressBarSlider->setSliderStyle (Slider::LinearBar); m_progressBarSlider->setTextBoxStyle (Slider::TextBoxLeft, true, 80, 20); @@ -252,7 +249,7 @@ MainComponent::MainComponent () sparsityLearningRateLabel->addListener (this); addAndMakeVisible (weightInitLabel = new Label ("WeightInit label", - TRANS("0.001"))); + TRANS("0.01"))); weightInitLabel->setFont (Font (15.00f, Font::plain)); weightInitLabel->setJustificationType (Justification::centred); weightInitLabel->setEditable (true, true, false); @@ -275,6 +272,11 @@ MainComponent::MainComponent () m_rbmSelect->setTextWhenNoChoicesAvailable (TRANS("(no choices)")); m_rbmSelect->addListener (this); + addAndMakeVisible (rbmDoSampleBatch = new ToggleButton ("rbmDoSampleBatch button")); + rbmDoSampleBatch->setTooltip (TRANS("Sample training data during learning\n")); + rbmDoSampleBatch->setButtonText (TRANS("Sample training")); + rbmDoSampleBatch->addListener (this); + //[UserPreSize] memset(m_pRbmComponent, 0, sizeof(m_pRbmComponent)); @@ -284,7 +286,7 @@ MainComponent::MainComponent () m_progressBarSlider->setValue(100); //[/UserPreSize] - setSize (1000, 600); + setSize (1200, 600); //[Constructor] You can add your own custom stuff here.. @@ -299,12 +301,10 @@ MainComponent::~MainComponent() trainButton = nullptr; addButton = nullptr; patterSlider = nullptr; - reconstructButton = nullptr; ShakeButton = nullptr; WeightsSlider = nullptr; numEpochslabel = nullptr; learningRateLabel = nullptr; - testButton = nullptr; numVisibleLabel = nullptr; numHiddenLabel = nullptr; createButton = nullptr; @@ -317,9 +317,8 @@ MainComponent::~MainComponent() clearTrainingButton = nullptr; removeTrainingButton = nullptr; numGibbsSlider = nullptr; - reconstructEquButton = nullptr; rbmDoRaoBlackwellToggleButton = nullptr; - rbmReduceVarianceToggleButton = nullptr; + rbmDoSampleVisibleToggleButton = nullptr; lambdaLabel = nullptr; sigmaLabel = nullptr; rbmUseVisibleGaussianToggleButton = nullptr; @@ -334,6 +333,7 @@ MainComponent::~MainComponent() rbmLearnVarianceButton = nullptr; rbmNormalizeDataToggleButton = nullptr; m_rbmSelect = nullptr; + rbmDoSampleBatch = nullptr; //[Destructor]. You can add your own custom destruction code here.. @@ -352,61 +352,61 @@ void MainComponent::paint (Graphics& g) g.setColour (Colours::black); g.setFont (Font (15.00f, Font::plain)); g.drawText (TRANS("Sigma"), - 500, 138, 80, 14, + 560, 138, 80, 14, Justification::centred, true); g.setColour (Colours::black); g.setFont (Font (15.00f, Font::plain)); g.drawText (TRANS("Lambda"), - 588, 138, 80, 14, + 648, 138, 80, 14, Justification::centred, true); g.setColour (Colours::black); g.setFont (Font (15.00f, Font::plain)); g.drawText (TRANS("Num. epochs"), - 491, 186, 91, 14, + 551, 186, 91, 14, Justification::centred, true); g.setColour (Colours::black); g.setFont (Font (15.00f, Font::plain)); g.drawText (TRANS("Alpha"), - 588, 186, 80, 14, + 648, 186, 80, 14, Justification::centred, true); g.setColour (Colours::black); g.setFont (Font (15.00f, Font::plain)); g.drawText (TRANS("Sparsity"), - 676, 138, 80, 14, + 736, 138, 80, 14, Justification::centred, true); g.setColour (Colours::black); g.setFont (Font (15.00f, Font::plain)); g.drawText (TRANS("Sigma decay"), - 764, 138, 96, 14, + 824, 138, 96, 14, Justification::centred, true); g.setColour (Colours::black); g.setFont (Font (15.00f, Font::plain)); g.drawText (TRANS("Weight decay"), - 764, 186, 96, 14, + 824, 186, 96, 14, Justification::centred, true); g.setColour (Colours::black); g.setFont (Font (15.00f, Font::plain)); g.drawText (TRANS("Momentum"), - 676, 186, 80, 14, + 736, 186, 80, 14, Justification::centred, true); g.setColour (Colours::black); g.setFont (Font (15.00f, Font::plain)); g.drawText (TRANS("Sparsity Alpha"), - 876, 138, 96, 14, + 936, 138, 96, 14, Justification::centred, true); g.setColour (Colours::black); g.setFont (Font (15.00f, Font::plain)); g.drawText (TRANS("Weight init"), - 876, 186, 96, 14, + 936, 186, 96, 14, Justification::centred, true); //[UserPaint] Add your own custom painting code here.. @@ -415,44 +415,42 @@ void MainComponent::paint (Graphics& g) void MainComponent::resized() { - trainButton->setBounds (592, 240, 72, 24); - addButton->setBounds (496, 20, 72, 24); - patterSlider->setBounds (696, 280, 184, 24); - reconstructButton->setBounds (496, 240, 72, 24); - ShakeButton->setBounds (592, 280, 72, 24); - WeightsSlider->setBounds (696, 320, 184, 24); - numEpochslabel->setBounds (504, 200, 72, 24); - learningRateLabel->setBounds (592, 200, 72, 24); - testButton->setBounds (592, 20, 72, 24); - numVisibleLabel->setBounds (736, 368, 48, 24); - numHiddenLabel->setBounds (840, 368, 48, 24); - createButton->setBounds (660, 368, 72, 24); - projectNameLabel->setBounds (892, 368, 96, 24); - loadButton->setBounds (496, 368, 72, 24); - saveButton->setBounds (576, 368, 72, 24); - numVisibleYLabel->setBounds (788, 368, 48, 24); - loadTrainingButton->setBounds (496, 404, 72, 24); - saveTrainingButton->setBounds (576, 404, 72, 24); - clearTrainingButton->setBounds (736, 404, 72, 24); - removeTrainingButton->setBounds (656, 404, 72, 24); - numGibbsSlider->setBounds (696, 240, 184, 24); - reconstructEquButton->setBounds (496, 280, 72, 24); - rbmDoRaoBlackwellToggleButton->setBounds (496, 60, 112, 24); - rbmReduceVarianceToggleButton->setBounds (640, 60, 128, 24); - lambdaLabel->setBounds (592, 152, 72, 24); - sigmaLabel->setBounds (504, 152, 72, 24); - rbmUseVisibleGaussianToggleButton->setBounds (640, 92, 160, 24); - rbmDoSparseToggleButton->setBounds (496, 92, 128, 24); - sparsityLabel->setBounds (680, 152, 72, 24); - sigmaDecayLabel->setBounds (776, 152, 72, 24); - weightDecayLabel->setBounds (776, 200, 72, 24); - m_progressBarSlider->setBounds (688, 20, 184, 24); - momentumLabel->setBounds (680, 200, 72, 24); - sparsityLearningRateLabel->setBounds (888, 152, 72, 24); - weightInitLabel->setBounds (888, 200, 72, 24); - rbmLearnVarianceButton->setBounds (808, 60, 128, 24); - rbmNormalizeDataToggleButton->setBounds (808, 92, 160, 24); - m_rbmSelect->setBounds (844, 404, 62, 24); + trainButton->setBounds (648, 20, 72, 24); + addButton->setBounds (556, 20, 72, 24); + patterSlider->setBounds (896, 280, 220, 24); + ShakeButton->setBounds (740, 20, 72, 24); + WeightsSlider->setBounds (896, 320, 220, 24); + numEpochslabel->setBounds (564, 200, 72, 24); + learningRateLabel->setBounds (652, 200, 72, 24); + numVisibleLabel->setBounds (656, 248, 48, 24); + numHiddenLabel->setBounds (780, 248, 48, 24); + createButton->setBounds (728, 280, 72, 24); + projectNameLabel->setBounds (552, 248, 96, 24); + loadButton->setBounds (564, 280, 72, 24); + saveButton->setBounds (644, 280, 72, 24); + numVisibleYLabel->setBounds (716, 248, 48, 24); + loadTrainingButton->setBounds (564, 316, 72, 24); + saveTrainingButton->setBounds (644, 316, 72, 24); + clearTrainingButton->setBounds (804, 316, 72, 24); + removeTrainingButton->setBounds (724, 316, 72, 24); + numGibbsSlider->setBounds (896, 240, 220, 24); + rbmDoRaoBlackwellToggleButton->setBounds (556, 60, 112, 24); + rbmDoSampleVisibleToggleButton->setBounds (680, 60, 128, 24); + lambdaLabel->setBounds (652, 152, 72, 24); + sigmaLabel->setBounds (564, 152, 72, 24); + rbmUseVisibleGaussianToggleButton->setBounds (680, 92, 156, 24); + rbmDoSparseToggleButton->setBounds (556, 92, 96, 24); + sparsityLabel->setBounds (740, 152, 72, 24); + sigmaDecayLabel->setBounds (836, 152, 72, 24); + weightDecayLabel->setBounds (836, 200, 72, 24); + m_progressBarSlider->setBounds (844, 20, 220, 24); + momentumLabel->setBounds (740, 200, 72, 24); + sparsityLearningRateLabel->setBounds (948, 152, 72, 24); + weightInitLabel->setBounds (948, 200, 72, 24); + rbmLearnVarianceButton->setBounds (976, 92, 128, 24); + rbmNormalizeDataToggleButton->setBounds (844, 92, 124, 24); + m_rbmSelect->setBounds (812, 280, 62, 24); + rbmDoSampleBatch->setBounds (844, 60, 128, 24); //[UserResized] Add your own custom resize handling here.. //[/UserResized] } @@ -475,12 +473,6 @@ void MainComponent::buttonClicked (Button* buttonThatWasClicked) m_pRbmComponent[0]->batchchanged(); //[/UserButtonCode_addButton] } - else if (buttonThatWasClicked == reconstructButton) - { - //[UserButtonCode_reconstructButton] -- add your button handler code here.. - m_pRbmComponentCurr->redrawReconstruction(); - //[/UserButtonCode_reconstructButton] - } else if (buttonThatWasClicked == ShakeButton) { //[UserButtonCode_ShakeButton] -- add your button handler code here.. @@ -490,13 +482,6 @@ void MainComponent::buttonClicked (Button* buttonThatWasClicked) m_pRbmComponentCurr->redrawReconstruction(); //[/UserButtonCode_ShakeButton] } - else if (buttonThatWasClicked == testButton) - { - //[UserButtonCode_testButton] -- add your button handler code here.. - m_pRbmComponentCurr->copyReconstructionToTraining(); - m_pRbmComponentCurr->redrawReconstruction(); - //[/UserButtonCode_testButton] - } else if (buttonThatWasClicked == createButton) { //[UserButtonCode_createButton] -- add your button handler code here.. @@ -508,7 +493,7 @@ void MainComponent::buttonClicked (Button* buttonThatWasClicked) //[UserButtonCode_loadButton] -- add your button handler code here.. m_rbmSelect->setSelectedId(1, sendNotification); create(getBaseDir()); - //[/UserButtonCode_loadButton] + //[/UserButtonCode_loadButton] } else if (buttonThatWasClicked == saveButton) { @@ -543,23 +528,17 @@ void MainComponent::buttonClicked (Button* buttonThatWasClicked) m_pRbmComponent[0]->batchchanged(); //[/UserButtonCode_removeTrainingButton] } - else if (buttonThatWasClicked == reconstructEquButton) - { - //[UserButtonCode_reconstructEquButton] -- add your button handler code here.. - m_pRbmComponentCurr->redrawReconstruction(); - //[/UserButtonCode_reconstructEquButton] - } else if (buttonThatWasClicked == rbmDoRaoBlackwellToggleButton) { //[UserButtonCode_rbmDoRaoBlackwellToggleButton] -- add your button handler code here.. m_pRbmComponentCurr->setDoRaoBlackwell(buttonThatWasClicked->getToggleState()); //[/UserButtonCode_rbmDoRaoBlackwellToggleButton] } - else if (buttonThatWasClicked == rbmReduceVarianceToggleButton) + else if (buttonThatWasClicked == rbmDoSampleVisibleToggleButton) { - //[UserButtonCode_rbmReduceVarianceToggleButton] -- add your button handler code here.. - m_pRbmComponentCurr->setUseProbsForHiddenReconstruction(buttonThatWasClicked->getToggleState()); - //[/UserButtonCode_rbmReduceVarianceToggleButton] + //[UserButtonCode_rbmDoSampleVisibleToggleButton] -- add your button handler code here.. + m_pRbmComponentCurr->setDoSampleVisible(buttonThatWasClicked->getToggleState()); + //[/UserButtonCode_rbmDoSampleVisibleToggleButton] } else if (buttonThatWasClicked == rbmUseVisibleGaussianToggleButton) { @@ -580,7 +559,7 @@ void MainComponent::buttonClicked (Button* buttonThatWasClicked) m_pRbmComponentCurr->setDoLearnVariance(buttonThatWasClicked->getToggleState()); if (!buttonThatWasClicked->getToggleState()) { - m_pRbmComponentCurr->setSigma(sigmaLabel->getText().getFloatValue()); + m_pRbmComponentCurr->setConstantSigma(sigmaLabel->getText().getFloatValue()); } //[/UserButtonCode_rbmLearnVarianceButton] } @@ -590,6 +569,12 @@ void MainComponent::buttonClicked (Button* buttonThatWasClicked) m_pRbmComponentCurr->setNormalizeData(buttonThatWasClicked->getToggleState()); //[/UserButtonCode_rbmNormalizeDataToggleButton] } + else if (buttonThatWasClicked == rbmDoSampleBatch) + { + //[UserButtonCode_rbmDoSampleBatch] -- add your button handler code here.. + m_pRbmComponentCurr->setDoSampleBatch(buttonThatWasClicked->getToggleState()); + //[/UserButtonCode_rbmDoSampleBatch] + } //[UserbuttonClicked_Post] //[/UserbuttonClicked_Post] @@ -674,7 +659,7 @@ void MainComponent::labelTextChanged (Label* labelThatHasChanged) else if (labelThatHasChanged == sigmaLabel) { //[UserLabelCode_sigmaLabel] -- add your label text handling code here.. - m_pRbmComponentCurr->setSigma(labelThatHasChanged->getText().getFloatValue()); + m_pRbmComponentCurr->setConstantSigma(labelThatHasChanged->getText().getFloatValue()); //[/UserLabelCode_sigmaLabel] } else if (labelThatHasChanged == sparsityLabel) @@ -878,10 +863,12 @@ void MainComponent::updateControls() { rbmDoRaoBlackwellToggleButton->setToggleState(m_pRbmComponentCurr->params().m_doRaoBlackwell, dontSendNotification); - rbmReduceVarianceToggleButton->setToggleState(m_pRbmComponentCurr->params().m_useProbsForHiddenReconstruction, dontSendNotification); + rbmDoSampleVisibleToggleButton->setToggleState(m_pRbmComponentCurr->params().m_doSampleVisible, dontSendNotification); + rbmDoSampleBatch->setToggleState(m_pRbmComponentCurr->params().m_doSampleBatch, dontSendNotification); rbmUseVisibleGaussianToggleButton->setToggleState(m_pRbmComponentCurr->params().m_useVisibleGaussian, dontSendNotification); rbmDoSparseToggleButton->setToggleState(m_pRbmComponentCurr->params().m_doSparse, dontSendNotification); rbmLearnVarianceButton->setToggleState(m_pRbmComponentCurr->params().m_doLearnVariance, dontSendNotification); + rbmDoSampleBatch->setToggleState(m_pRbmComponentCurr->params().m_doSampleBatch, dontSendNotification); lambdaLabel->setText(String(m_pRbmComponentCurr->params().m_lambda), dontSendNotification); sigmaDecayLabel->setText(String(m_pRbmComponentCurr->params().m_sigmaDecay), dontSendNotification); @@ -918,7 +905,7 @@ BEGIN_JUCER_METADATA parentClasses="public Component, public RbmComponentListener, public LayerArrayListener, public Thread" constructorParams="" variableInitialisers="Thread("RBM"), m_pRbmComponentCurr(nullptr), m_weightsCurr(nullptr), m_layers(this)" snapPixels="4" snapActive="1" snapShown="1" overlayOpacity="0.330" - fixedSize="1" initialWidth="1000" initialHeight="600"> + fixedSize="1" initialWidth="1200" initialHeight="600"> @@ -930,176 +917,173 @@ BEGIN_JUCER_METADATA - - - - - - - - - - - + virtualName="" explicitFocusOrder="0" pos="896 280 220 24" tooltip="Training index" + min="0" max="0" int="1" style="LinearBar" textBoxPos="TextBoxLeft" + textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/> + virtualName="" explicitFocusOrder="0" pos="896 320 220 24" tooltip="Weight index" + min="0" max="0" int="1" style="LinearBar" textBoxPos="TextBoxLeft" + textBoxEditable="1" textBoxWidth="80" textBoxHeight="20" skewFactor="1"/>