How to interpret the results of Validation of Candidate Node Machines

Hello everyone, I encountered some problems when verifying the candidate node machine. I hope to get help.

The return results of no_nodes = 0 and no_nodes = 5 operations are both equal to 17

The following is my operation record:

  • current nodes = current_nodes_20231212_140011.csv
   
    df_candidate_nodes = create_candidate_node_dataframe(node_provider ='ZTLC PTE LTD',
                                                         data_center ='hk3',
                                                         data_center_provider ='hkcolo',
                                                         country = 'HK',
                                                         is_sev = True,
                                                         no_nodes = 5)
$ poetry run python3 topology_optimizer/main.py ./data/current_nodes_20231212_140011.csv 
Welcome to the CBC MILP Solver 
Version: 2.10.3 
Build Date: Dec 15 2019 

command line - /Users/jueming/Library/Caches/pypoetry/virtualenvs/ic-topology-kJr74cF0-py3.11/lib/python3.11/site-packages/pulp/solverdir/cbc/osx/64/cbc /var/folders/_t/jqy5f5c52rv1gbdd5ymsytvw0000gn/T/171cbfb9eb6740f4ba372d907e1cf0d3-pulp.mps timeMode elapsed branch printingOptions all solution /var/folders/_t/jqy5f5c52rv1gbdd5ymsytvw0000gn/T/171cbfb9eb6740f4ba372d907e1cf0d3-pulp.sol (default strategy 1)
At line 2 NAME          MODEL
At line 3 ROWS
At line 75161 COLUMNS
At line 785357 RHS
At line 860514 BOUNDS
At line 960155 ENDATA
Problem MODEL has 75156 rows, 99640 columns and 501315 elements
Coin0008I MODEL read with 0 errors
Option for timeMode changed from cpu to elapsed
Continuous objective value is 17 - 0.92 seconds
Cgl0002I 5475 variables fixed
Cgl0003I 0 fixed, 0 tightened bounds, 142 strengthened rows, 0 substitutions
Cgl0004I processed model has 12296 rows, 61690 columns (61690 integer (61690 of which binary)) and 371410 elements
Cutoff increment increased from 1e-05 to 0.9999
Cbc0038I Initial state - 249 integers unsatisfied sum - 114
Cbc0038I Pass   1: (3.41 seconds) suminf.  108.66667 (233) obj. 17 iterations 4439
Cbc0038I Pass   2: (3.45 seconds) suminf.   97.16667 (210) obj. 17 iterations 162
Cbc0038I Pass   3: (3.48 seconds) suminf.   90.66667 (197) obj. 17 iterations 34
Cbc0038I Pass   4: (3.51 seconds) suminf.   82.16667 (180) obj. 17 iterations 79
Cbc0038I Pass   5: (3.54 seconds) suminf.   71.16667 (158) obj. 17 iterations 67
Cbc0038I Pass   6: (3.57 seconds) suminf.   57.16667 (130) obj. 17 iterations 129
Cbc0038I Pass   7: (3.60 seconds) suminf.   47.16667 (110) obj. 17 iterations 114
Cbc0038I Pass   8: (3.63 seconds) suminf.   34.16667 (84) obj. 17 iterations 75
Cbc0038I Pass   9: (3.66 seconds) suminf.   20.16667 (56) obj. 17 iterations 62
Cbc0038I Pass  10: (3.69 seconds) suminf.   14.00000 (42) obj. 17 iterations 92
Cbc0038I Pass  11: (3.72 seconds) suminf.   10.66667 (32) obj. 17 iterations 29
Cbc0038I Pass  12: (3.75 seconds) suminf.    3.00000 (9) obj. 17 iterations 46
Cbc0038I Solution found of 17
Cbc0038I Before mini branch and bound, 61441 integers at bound fixed and 0 continuous
Cbc0038I Mini branch and bound did not improve solution (3.77 seconds)
Cbc0038I After 3.78 seconds - Feasibility pump exiting with objective of 17 - took 1.31 seconds
Cbc0012I Integer solution of 17 found by feasibility pump after 0 iterations and 0 nodes (3.78 seconds)
Cbc0001I Search completed - best objective 17, took 0 iterations and 0 nodes (3.82 seconds)
Cbc0035I Maximum depth 0, 0 variables fixed on reduced cost
Cuts at root node changed objective from 17 to 17
Probing was tried 0 times and created 0 cuts of which 0 were active after adding rounds of cuts (0.000 seconds)
Gomory was tried 0 times and created 0 cuts of which 0 were active after adding rounds of cuts (0.000 seconds)
Knapsack was tried 0 times and created 0 cuts of which 0 were active after adding rounds of cuts (0.000 seconds)
Clique was tried 0 times and created 0 cuts of which 0 were active after adding rounds of cuts (0.000 seconds)
MixedIntegerRounding2 was tried 0 times and created 0 cuts of which 0 were active after adding rounds of cuts (0.000 seconds)
FlowCover was tried 0 times and created 0 cuts of which 0 were active after adding rounds of cuts (0.000 seconds)
TwoMirCuts was tried 0 times and created 0 cuts of which 0 were active after adding rounds of cuts (0.000 seconds)
ZeroHalf was tried 0 times and created 0 cuts of which 0 were active after adding rounds of cuts (0.000 seconds)

Result - Optimal solution found

Objective value:                17.00000000
Enumerated nodes:               0
Total iterations:               0
Time (CPU seconds):             3.95
Time (Wallclock seconds):       4.12

Option for printingOptions changed from normal to all
Total time (CPU seconds):       4.25   (Wallclock seconds):       4.45

     Node_Index  Subnet_Index  Node_Type  Allocation_Value
0             0            18    current               1.0
1             1             8    current               1.0
2             2             5    current               1.0
3             4             5    current               1.0
4             6             8    current               1.0
..          ...           ...        ...               ...
626        1618             3  synthetic               1.0
627        1621             0  synthetic               1.0
628        1625             0  synthetic               1.0
629        1635             3  synthetic               1.0
630        1637             0  synthetic               1.0

[631 rows x 4 columns]
              node_provider  subnet_index  allocation_value
0    Icaria Systems Pty Ltd             3               1.0
1    Icaria Systems Pty Ltd             7               1.0
2    Icaria Systems Pty Ltd             8               1.0
3    Icaria Systems Pty Ltd            18               1.0
4    Icaria Systems Pty Ltd            19               1.0
..                      ...           ...               ...
626                    NP55             3               1.0
627                    NP56             0               1.0
628                    NP57             0               1.0
629                    NP59             3               1.0
630                    NP60             0               1.0

[631 rows x 3 columns]
    data_center  subnet_index  allocation_value
0           mn2             3               1.0
1           mn2             7               1.0
2           mn2             8               1.0
3           mn2            18               1.0
4           mn2            19               1.0
..          ...           ...               ...
626        DC55             3               1.0
627        DC56             0               1.0
628        DC57             0               1.0
629        DC59             3               1.0
630        DC60             0               1.0

[631 rows x 3 columns]
    data_center_provider  subnet_index  allocation_value
0                 NEXTDC             0               1.0
1                 NEXTDC             1               1.0
2                 NEXTDC             2               1.0
3                 NEXTDC             3               1.0
4                 NEXTDC             4               1.0
..                   ...           ...               ...
626                DCP55             3               1.0
627                DCP56             0               1.0
628                DCP57             0               1.0
629                DCP59             3               1.0
630                DCP60             0               1.0

[631 rows x 3 columns]
    country  subnet_index  allocation_value
0        AU             0               1.0
1        AU             1               1.0
2        AU             2               1.0
3        AU             3               1.0
4        AU             4               1.0
..      ...           ...               ...
486     C10             0               2.0
487     C11             3               2.0
488     C11             4               1.0
489     C12             0               3.0
490     C12             3               1.0

[491 rows x 3 columns]
Status: Optimal

Hi @jueming if the ObjectiveValue does not change when you add more nodes (you increased the no_nodes from 0 to 5) it basically means that the nodes do not add to the decentralization of the IC network. There could be a number of reasons for that:

  • the node provider already has many node machines across the different subnets.

  • there are already sufficient nodes in Hong Kong to support decentralization of all the subnets.

  • there are too many nodes from different node providers in the same data center.

In this case, if I look at the dashboard there are already a lot of node machines in Hong Kong, so unfortunately adding additional node machines in Hong Kong does not help decentralization of the IC. What you could do is either wait until the community votes on an updated IC target topology (i.e. more subnets and/or more node machines are required) or check whether you can set up several node machines in another country where less node machines are live.

Hope this answers your question. Feel free to join the Matrix/Element channel if you want to further discuss on any NP topic: Node Provider Matrix channel - Internet Computer Wiki

Thanks, I tried to add data center to US, add data center pl3, when no_nodes = 0 the Objective value is equal to 17 and when I adjust no_nodes = 5 the Objective value is equal to 14 which means if I add 5 nodes in US it will still increase the IC network The degree of decentralization, can I understand it this way?

Yes , correct me please @SvenF if I’m wrong, it means yes you are contributing to the decentralization but you can only add, in this case, 3 nodes and it contributes just as much as if you were adding 5; i.e. 5 is to many nodes, 3 would be adequate(it is a 1:1 ratio, 1 node added should decrease Objective Value by 1). You can read all this on the Internet Computer Wiki under Node Provider Section.

1 Like

Thanks @ZanderG, yes that is correct.

1 Like

@SvenF @ZanderG Thank you for your explanation, I think I understand

1 Like

@SvenF just want to enquire about a certain simulation. So lets say I’m a new node provider using a new data center and a new data center provider in South Africa and I have no other node machines elsewhere and I run the program, why doesn’t the Objective Value go down even though the country is still under the limit of how many nodes there can be in a country?

Hi @ZanderG the way to explain it could be as follows:

  • as you can see from the picture above only 4 of the larger subnets have room for additional node machines.
  • the algorithm is optimizing the best fit of nodes, node providers, data centers, and countries across the subnets.
  • all subnets are filled with 1, 2 or max 3 (in case of the larger subnets with 28 or more nodes) node machines from the same country.
  • the current topology is such that the optimization tool found the best fit where there are already 3 node machines allocated from South Africa in the larger subnets. So there is no way to add more node machines from South Africa because these larger subnets have already 3 node machines from South Africa.

Does that clarify?

@SvenF Yes, thank you very much. So if I understand correctly, the only way to be able to add more nodes in South Africa is if there is more subnets created and the only way more subnets are created is when the total number of Internet Computer users grow or specific ones are required like the EU one?

Please also consider that:
There are also 33 subnets with 13 nodes each.
These subnets can have up to 2 South African nodes.

The 4 larger subnets can have 3 South African nodes

Thus in total 43 + 332 = 78 nodes (without allowing for unhealthy nodes)

Adding more nodes in South Africa, owned by New Node Providers, deployed in data centres that are not owned by any of the existing data centre owners and not being used by any existing node providers improve decentralization even further.

I expected the Reduction coefficient in the rewards calc to drop to 0.7 after the first 50 nodes in the country, thus making is less attractive for node providers with many nodes, but still possible for node providers with 1 or 2 nodes - as per wiki

2 Likes

Thanks @ZanderG! These are good points. We need to consider these and discuss in the community for future versions of the IC Topology optimization and remuneration approach.

1 Like

Hello @SvenF , I tried to add nodes in Australia. I ran candidate node verification. When no_nodes = 0, the Objective Value was 5, but I did not see a node provider in Australia in Data Centers. Why is this?

df_candidate_nodes = create_candidate_node_dataframe(node_provider ='ZTLC PTE LTD',
                                                     data_center ='au1',
                                                     data_center_provider ='Flexential',
                                                     country = 'AU',
                                                     is_sev = True,
                                                     no_nodes = 0)

Hi @jueming you can see from the ICP dashboard (https://dashboard.internetcomputer.org/) that there are definitely node machines in Australia, 10 active in Melbourne 2 (Data Center: Melbourne 2 - ICP Dashboard) and 89 node machines in Queensland 1 (Data Center: Queensland 1 - ICP Dashboard). Hope this helps.